我正在使用以下代码打开和关闭LED手电筒:

public Flashlight(SurfaceView preview, Context context){
        this.preview = preview;
        this.context = context;
        mHolder = preview.getHolder(); //mHolder is surfaceHolder
        mHolder.addCallback(this);
        try {
            mCamera = Camera.open();
            params = mCamera.getParameters();
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();

            //AUTOFOCUS LASER FIX ON LG G3
            List<String> focusModes = params.getSupportedFocusModes();
            if (focusModes.contains(params.FOCUS_MODE_INFINITY)) {
                params.setFocusMode(params.FOCUS_MODE_INFINITY);
            }
            else{
                if (focusModes.contains(params.FOCUS_MODE_FIXED))
                    params.setFocusMode(params.FOCUS_MODE_FIXED);
            }
            mCamera.setParameters(params);
            cameraOpened = true;
        }catch (Exception e){
            cameraOpened = false;
            e.printStackTrace();
        }
    }
    private void turnOnFlashlight(){
        flashlightOn = true;
        params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        mCamera.setParameters(params);
    }
    private void turnOffFlashlight(){
        flashlightOn = false;
        params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        mCamera.setParameters(params);
    }

它在大多数手机上都很好用,但在Xperia Z5上我没法用。我没有Z5测试,所以我只知道从用户的反应。所以我想问是否有其他的方法(最好是工作)来打开Xperia Z5的手电筒。
向前谢谢

最佳答案

正如评论中已经提到的,我发现有3个步骤可以让flash出现(目前为止似乎在所有设备上都工作)

cam.setParameters(p); // will trigger flash on most devices
// Needed for some devices.
cam.setPreviewTexture(new SurfaceTexture(0));
// Needed for some more devices.
cam.startPreview();

既然你做了其中的两个,试着添加previewtexture,它应该可以工作。可在Flashlight Widget找到工作手电筒的全部代码。

08-06 06:24