
我有以下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相机行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)