我有以下 android 代码(这里用伪代码编写):
mCamera = configAndInitialize(); //all I want to do before taking picture
mCamera.startPreview();
mCamera.torchOn(); //setting parameters with flash mode torch
onClick(){
mCamera.stopPreview();
mCamera.takePicture();
mCamera.torchOff();
}
有时(通常当手机最近重新启动并且在此应用程序之前未使用相机时)此代码以错误 100 Camera server dead 结束。如果相机在通常工作之前成功拍照。
我调试了很长时间,当我用 Torch 注释掉行时,我发现它可以工作。在拍照时,我可以看到手电筒在两种情况下都有效。
torchOn 的代码如下:
if(mCamera != null){
mCamera.stopPreview();
Camera.Parameters p = mCamera.getParameters();
List<String> supported = p.getSupportedFlashModes();
if (supported.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
}
mCamera.setParameters(p);
mCamera.startPreview();
}
有没有什么原因会因为手电筒而无法拍照?我观察到它发生在摩托罗拉 Razr 和三星 Galaxy SIII 上。
我在我的设备上安装了这个应用程序的两个版本(名称不同等)。我做以下事情:
- 重启设备
- 尝试了带火炬的应用程序
- 如果 app-with-torch 确实在第 1 点起作用。
- 尝试了没有手电筒的应用程序
- 尝试了带火炬的应用程序
结果如下:
- 没有火炬的应用程序始终有效
- 在大约 80% 的尝试中,App-with-torch 在第 2 点不起作用。(重启后)
- App-with-torch 始终在第 5 点工作。(在使用 app-without-torch 之后)
即使我在拍照前添加了 torchOff(),我的应用程序也开始工作。