火炬打开时奇怪的Android相机行为

火炬打开时奇怪的Android相机行为,第1张

概述我有以下android代码(这里用伪代码编写):mCamera=configAndInitialize();//allIwanttodobeforetakingpicturemCamera.startPreview();mCamera.torchOn();//settingparameterswithflashmodetorchonClick(){mCamera.stopPreview();mCamera.takePictur

我有以下android代码(这里用伪代码编写):

mCamera = configAndInitialize(); //all I want to do before taking picturemCamera.startPrevIEw();mCamera.torchOn(); //setting parameters with flash mode torchonClick(){    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 SIII上.

我在我的设备上安装了这个应用程序的两个版本(具有不同的名称等).我做了以下事情:

>重启设备
>尝试使用火炬手
>如果app-with-torch确实在第1点工作.
>尝试没有火炬的应用程序
>尝试使用火炬手

结果如下:

> App-without-torch始终有效
>大约80%的尝试中的应用程序火炬在第2点不起作用.(重启后)
> App-with-torch总是在第5点工作.(使用app-without-torch之后)

即使我在拍照之前添加了torchOff(),我的应用也会开始工作.

解决方法:

我们可以称之为“Monty Python Dead Parrot Log.d回答”:-P我希望我有一个解决方案 – 尽管有一些建议. HeisenBUGs很难捕捉到.

火炬是否有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?

我相信你很清楚当相机被点燃时会发生多少事情 – 似乎有几百个电话.由于其中一些低级项目是异步的(毕竟凸轮是硬件),我怀疑你得到的是NPE或初始化不充分的对象.并非所有的NPE都被困,因此如果使用延迟或同步序列,它可能会死在那些不存在的NPE上.

(HTH – 我感觉到你的痛苦,ari,我最近不得不做很多相机的东西.在三星SIII上进行调试非常费时.)

[编辑]你可能已经找到了这个链接,但以防万一:

How to turn on camera flash light programmatically in Android?

总结

以上是内存溢出为你收集整理的火炬打开时奇怪的Android相机行为全部内容,希望文章能够帮你解决火炬打开时奇怪的Android相机行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1119024.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存