在Android中n分钟或n秒后强制相机LED指示灯熄灭

时间:2011-08-07 11:23:18

标签: android android-camera

我正在开启/关闭相机手电筒。

我想做的是:

  1. 当用户点击“开始LED”按钮时,它应该启动“相机LED”。
  2. n秒后自动停止相机LED,例如。 30秒后(完全基于用户设置)。
  3. 当用户按下“停止LED”按钮
  4. 时停止相机LED

    我使用ToggleButton启动和停止相机LED。

    这就是我所做的:

     toggleLED.setOnClickListener(new OnClickListener() {  
                public void onClick(View v) {      
    
                    if (toggleLED.isChecked())
                    {
                        startLED();
                    }
                    else      
                    {
                        stopLED();
                    }
                }
            });
    

    到目前为止,我成功打开和关闭了相机灯。

    开启时间:

    void startLED(){
        Camera cam;
        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) {
                    }
         });
    }
    

    关闭:

    void stopLED() {
        cam.stopPreview();
        cam.release();
    }
    

    ToggleButton的功能正常。

    但我想要的是:          如何在n秒后关闭相机灯?

    编辑:

    我试过用这个&它完全正常。但我想知道我是否以正确的方式进行..

     Runnable r = new Runnable()
                  {
                      public void run()
                      {
                          stopLED();                  
    
                      }
                  };
    
    
    toggleLED.setOnClickListener(new OnClickListener() {  
                public void onClick(View v) {      
                    // Perform action on clicks     
    
    
    
                    if (toggleLED.isChecked())
                    {
                        startLED();                 
    
                        int onledseconds=pref.getInt(MySettings.SHUTOFF_PERIOD,0);                  
    
                        if(onledseconds!=0)
                            handler.postDelayed(r,ledonseconds);
                    }
                    else      
                    {
    
                        stopLED();
                    }
                }
            });      
    

2 个答案:

答案 0 :(得分:2)

使用AlarmManager安排PendingIntent,它会关闭相机灯。通过使用AlarmManager,即使您的应用程序被系统暂停或终止,您仍可以确保它仍然可以运行。

您可以在Android: How to use AlarmManager

看到一些示例代码

答案 1 :(得分:0)

我试过用这个&它完全正常。但我想知道我是否以正确的方式进行..

Runnable r = new Runnable()
{
   public void run()
   {
      stopLED();                  
   }
};
toggleLED.setOnClickListener(new OnClickListener() {  
  public void onClick(View v) {      
    // Perform action on clicks     
    if (toggleLED.isChecked())
    {
       startLED();                 
       int onledseconds=pref.getInt(MySettings.SHUTOFF_PERIOD,0);                  
       if(onledseconds!=0)
       handler.postDelayed(r,ledonseconds);
    }
    else      
    {
      stopLED();
    }                     
  }
});