android和相机闪光灯

时间:2011-12-29 16:05:14

标签: android

我想编写将用于相机闪光灯的应用程序。我希望灯光闪烁。现在我有这个代码:

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) {
                }
            });

我不知道为什么它有必要,但如果没有它就无法工作。

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

PS。我有三星Galaxy ace。

1 个答案:

答案 0 :(得分:1)

您想要使用的似乎是Parameters.FLASH_MODE_TORCH。如果要打开闪光灯LED,将其设置为TORCH,然后在希望关闭手电筒灯时将其设置为AUTO。

另外,请查看此问题Camera.Parameters.FLASH_MODE_TORCH replacement for Android 2.1,因为它会告诉您人们遇到的某些问题。

然后,对于计时器,您可以使用 Timer 的实例和 TimerTask 的子类来执行此操作。以下是我编写的代码示例,以确保Internet查询不会耗费太长时间:

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”是一个标记名称,用于引用 Timer 。 “qlt”是计时器t1结束后运行的类。 “lyricsTimeout”是用户在设置中指定的数值(以秒为单位的超时)。 “clt”是从 AsyncTask 派生的类的实例,因此它将运行查询而不会冻结我的UI。显然,在你的情况下,你可能不需要AsyncTask,但可能在run()中使用一个简单的“if”语句来根据当前状态切换flash手电筒。

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