2011-12-29 106 views
0

我想写的应用程序将使用相机闪光灯。我想让灯光闪烁。现在我有这样的代码:机器人和相机闪光灯

void ledon() { 
    cam = Camera.open(); 
    Parameters params = cam.getParameters(); 
    params.setFlashMode(Parameters.FLASH_MODE_ON); 

    cam.setParameters(params); 
    cam.startPreview(); 
    cam.autoFocus(new AutoFocusCallback() { 
       public void onAutoFocus(boolean success, Camera camera) { 
       } 
      }); 
} 

这一部分:

 cam.autoFocus(new AutoFocusCallback() { 
       public void onAutoFocus(boolean success, Camera camera) { 
       } 
      }); 

我不知道为什么它的必要,但它不会没有它的工作。

此代码开启led并自动关闭约2秒钟。我想领导会打开例如持续5秒,然后3秒导致关闭,然后再打开4秒。我可以如何手动设置led将会打开和关闭的时间段。这可能吗?谢谢你的帮助。

PS。我有三星银河王牌。

回答

1

它看起来像你想要使用的是Parameters.FLASH_MODE_TORCH。当您想打开闪光灯LED时,将其设定为TORCH,然后在您希望熄灭手电筒时将其设定为AUTO。

另外,看看这个SO问题Camera.Parameters.FLASH_MODE_TORCH replacement for Android 2.1,因为它会告诉你一些人们遇到的某些问题与某些设备。

然后,定时器,你可以使用定时器的实例,并的TimerTask的子类,这样的伎俩。下面是代码的例子,我写,以确保互联网查询未服用时间过长:

private QueryLyricsTask clt; 
private Timer t1; 
... 
/* Make sure the query doesn't take too long */ 
try { 
    t1 = new Timer("monitorTimeout"); 
    t1.schedule(new qlt(), lyricsTimeout * 1000); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
... 
class qlt extends java.util.TimerTask { 
    @Override 
    public void run() { 
     if (clt.getStatus() != Status.FINISHED) 
      clt.cancel(true); 
    } 
} 

为了解释这些变量,“monitorTimeout”是引用定时器标签名称。 “qlt”是定时器t1过去后运行的类。 “lyricsTimeout”是用户在设置中指定的数值(以秒为单位)。 “clt”是派生自AsyncTask的类的一个实例,因此它将运行查询而不会冻结我的UI。很明显,在你的情况下,你可能不需要一个AsyncTask,但是run()中的一个简单的“if”语句可以根据当前状态来切换闪光灯。

查看documentation on the Timer class,这样您就可以了解如何使定时器一次或多次触发,或者在一天的特定时间触发。