使闪光灯始终开启(CameraPreview Android)
Make Flash always ON(CameraPreview Android)
我刚开始开发一个 Android 应用程序,它需要使用相机功能来捕捉图像,我想保持闪光灯始终开启。问题是,当我从应用程序启动相机时,闪光灯仅 闪烁一次然后停止。
我用 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 上测试了该应用程序。
相机 Intent 不符合我的需要,Camera2 被排除在外。
谢谢!
找到解决方案:
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的代码
我刚开始开发一个 Android 应用程序,它需要使用相机功能来捕捉图像,我想保持闪光灯始终开启。问题是,当我从应用程序启动相机时,闪光灯仅 闪烁一次然后停止。
我用 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 上测试了该应用程序。
相机 Intent 不符合我的需要,Camera2 被排除在外。
谢谢!
找到解决方案:
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的代码