2011-12-29 90 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,這樣您就可以瞭解如何使定時器一次或多次觸發,或者在一天的特定時間觸發。