我有以下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摄像头服务器失效而结束。如果相机在正常工作之前成功拍摄了照片。
我对它进行了大量的调试,当我用手电筒对线路进行评论时,我发现它是有效的。我可以看到火炬在这两种情况下工作时,拍照或不工作。
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上。
我在我的设备上安装了两个版本的这个应用程序(具有不同的名称等等)。以下是我要做的:
结果如下:
即使我在拍照前添加了torchOff(),我的应用程序也会开始工作。
发布于 2013-08-28 16:03:48
我们可以称之为“MontyPythonDeadParroLog.d回答”:-P -我希望我能为你找到一个解决方案--尽管有一些建议。海生虫很难抓到。
火炬有isOn()测试吗?
类似地(我不记得),照相机有isReady()测试吗?
如果相机在mCamera.torchOn()或.torchOff()之前、期间或之后死亡,您能从日志中看出吗?
如果您延长通话之间的时间范围,会发生什么情况?对于真正的应用程序来说,这是行不通的,但可能会帮助您监视和捕捉正在发生的事情。用伪代码这样说:
try {
// Log.d ("cam", "here 1") ;
mCamera = configAndInitialize();
// Log.d ("cam", "here 2");
if ( mCamera.isReady() ) { // or isConfigured / initialized
// Log.d ("cam", "here 2");
Camera.startPreview();
// Log.d ("cam", "here 2");
thisThread.setDelay (200); // millisecs. try even up to 2000 ms !
// Log.d ("cam", "here 4");
mCamera.torchOn();
// Log.d ("cam", "here 5");
thisThread.setDelay (200); // again up to 2000 ms
// Log.d ("cam", "here 6");
}
} catch (Exception e) {
Log.d ("oops!", e.toString() );
}另一件要监控的事情,或确保,是相机和火炬真正准备好之前,onClick可以开火。分散一些延迟,就像Log.d到处都在看。它可能需要回调(mCamera.isReady()然后启用onClick )。
另一件事是,看看你是否可以挖掘相机的源代码(或火炬)和GREP的错误100 -或者是一个通用的android 100?
我相信你很清楚当摄像机被点燃的时候会发生多少事情--好像有几百个电话。由于其中一些低级别项是异步的(cam毕竟是硬件),我怀疑您得到的是NPE或未充分初始化的对象。并不是所有的NPE等都会被困住,所以如果使用延迟序列或同步序列,它可能就会死在不存在的位置上。
(我感觉到你的痛苦,阿里,我最近不得不做了很多相机的事情。在三星SIII上进行调试是非常耗时的。)
编辑您可能已经找到这个链接,但以防万一:
How to turn on camera flash light programmatically in Android?
发布于 2013-09-02 08:40:44
我认为这与每个OEM实现Android相机HAL (硬件抽象层)有关。这个问题也发生在我身上,我不确定,但我怀疑大多数相机HALs的火炬模式只适用于视频捕捉,因为这是使用最多的地方。试着用手电筒录一段视频来检查一下。
一种可能的解决办法是在拍照前将相机的闪光灯模式设置为FLASH_MODE_ON,然后在拍照后返回到FLASH_MODE_TORCH,如果再次需要的话。
https://stackoverflow.com/questions/18401494
复制相似问题