使Flash始终开启(CameraPreview Android)

时间:2015-06-24 13:56:18

标签: android flash camera android-camera android-framelayout

我刚刚开始开发一款Android应用,需要使用相机功能来捕捉图像,我想保持Flash始终开启。问题是,当我从应用程序启动相机时,只有闪烁一次并停止。

我使用 Camera class 实现了相机,并使用 CameraPreview 扩展 SurfaceView 并完全实现 SurfaceHolder 像Android开发者页面中的示例:Here

然后我使用FrameLayout来显示相机预览:

// Create an instance of Camera
mCamera = getCameraInstance();

Parameters p = mCamera.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(p);

// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);

除了闪烁一次并停止的闪光外,一切都很好。 我用KitKat测试了三星Galaxy S5上的应用程序。

相机的意图不符合我的需要,Camera2被排除在外。

谢谢!

1 个答案:

答案 0 :(得分:0)

找到解决方案:

 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // If your preview can change or rotate, take care of those events here.
    // Make sure to stop the preview before resizing or reformatting it.

    if (mHolder.getSurface() == null){
      // preview surface does not exist
      return;
    }

    // stop preview before making changes
    try {
        mCamera.stopPreview();
    } catch (Exception e){
      // ignore: tried to stop a non-existent preview
    }

    // set preview size and make any resize, rotate or
    // reformatting changes here

    // start preview with new settings
    try {
        //Turn flash on
        Camera.Parameters p = mCamera.getParameters();
        p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        mCamera.setParameters(p);

        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();

    } catch (Exception e){
        Log.d(TAG, "Error starting camera preview: " + e.getMessage());
    }
}

添加代码以在SurfaceChanged方法的第二次try-catch中启动flash。