首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当火炬打开时,机器人的奇怪行为

当火炬打开时,机器人的奇怪行为
EN

Stack Overflow用户
提问于 2013-08-23 11:16:17
回答 2查看 1.4K关注 0票数 4

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

代码语言:javascript
复制
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代码如下:

代码语言:javascript
复制
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上。

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

  1. 重新启动装置
  2. 手电筒试过
  3. 如果手电筒真的在第1点起作用。
  4. 试过无火炬应用
  5. 手电筒试过

结果如下:

  1. 没有火炬的应用总是起作用的。
  2. 在大约80%的尝试中,有80%的应用程序在第2点不能工作。(重新启动后)
  3. 手电筒总是在第5点起作用。(在没有使用手电筒之后)

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

EN

回答 2

Stack Overflow用户

发布于 2013-08-28 16:03:48

我们可以称之为“MontyPythonDeadParroLog.d回答”:-P -我希望我能为你找到一个解决方案--尽管有一些建议。海生虫很难抓到。

火炬有isOn()测试吗?

类似地(我不记得),照相机有isReady()测试吗?

如果相机在mCamera.torchOn()或.torchOff()之前、期间或之后死亡,您能从日志中看出吗?

如果您延长通话之间的时间范围,会发生什么情况?对于真正的应用程序来说,这是行不通的,但可能会帮助您监视和捕捉正在发生的事情。用伪代码这样说:

代码语言:javascript
复制
  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?

票数 2
EN

Stack Overflow用户

发布于 2013-09-02 08:40:44

我认为这与每个OEM实现Android相机HAL (硬件抽象层)有关。这个问题也发生在我身上,我不确定,但我怀疑大多数相机HALs的火炬模式只适用于视频捕捉,因为这是使用最多的地方。试着用手电筒录一段视频来检查一下。

一种可能的解决办法是在拍照前将相机的闪光灯模式设置为FLASH_MODE_ON,然后在拍照后返回到FLASH_MODE_TORCH,如果再次需要的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18401494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档