2013-05-02 109 views
1

我想用led /手电筒给一些效果。但它并不快速闪烁,即使我尝试了睡眠(2),但它需要时间眨眼。我想快点闪烁。Android如何快速闪烁led /手电筒

public void flash_effect() throws InterruptedException 
{ 
    cam = Camera.open();  
    final Parameters p = cam.getParameters(); 
    p.setFlashMode(Parameters.FLASH_MODE_TORCH); 


    Thread a = new Thread() 
    { 
     public void run() 
     { 
      for(int i =0; i < 10; i++) 
      { 
       cam.setParameters(p); 
       cam.startPreview(); 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       cam.stopPreview(); 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     } 
    }; 
    a.start(); 
} 

回答

4

你在哪里设置预览显示?

https://developer.android.com/reference/android/hardware/Camera.html

重要:传递一个完全初始化SurfaceHolder到 setPreviewDisplay(SurfaceHolder)。如果没有表面,相机将无法启动预览功能 。

cam.setPreviewDisplay(null); 

也许你应该试试这个:

Thread t = new Thread() { 
    public void run() { 
     try { 
      // Switch on the cam for app's life 
      if (mCamera == null) { 
       // Turn on Cam 
       mCamera = Camera.open(); 
       try { 
        mCamera.setPreviewDisplay(null); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       mCamera.startPreview(); 
      } 

      for (int i=0; i < times*2; i++) { 
       toggleFlashLight(); 
       sleep(delay); 
      } 

      if (mCamera != null) { 
       mCamera.stopPreview(); 
       mCamera.release(); 
       mCamera = null; 
      } 
     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 
}; 

t.start(); 

需要的功能:

/** Turn the devices FlashLight on */ 
public void turnOn() { 
    if (mCamera != null) { 
    // Turn on LED 
    mParams = mCamera.getParameters(); 
    mParams.setFlashMode(Parameters.FLASH_MODE_TORCH); 
    mCamera.setParameters(mParams); 

    on = true; 
} 
} 

/** Turn the devices FlashLight off */ 
public void turnOff() { 
    // Turn off flashlight 
    if (mCamera != null) { 
     mParams = mCamera.getParameters(); 
     if (mParams.getFlashMode().equals(Parameters.FLASH_MODE_TORCH)) { 
      mParams.setFlashMode(Parameters.FLASH_MODE_OFF); 
      mCamera.setParameters(mParams); 
     } 
    } 
    on = false; 
} 

/** Toggle the flashlight on/off status */ 
public void toggleFlashLight() { 
    if (!on) { // Off, turn it on 
     turnOn(); 
    } else { // On, turn it off 
     turnOff(); 
    } 
} 

,需要实例瓦尔:

Camera mCamera; 
Camera.Parameters mParameters; 
int delay = 100; // in ms 
+1

代码从我自己的项目在这里: [NotifFlashlight ](http://sourceforge.net/p/notifflashlight/code/ci/master/tree/src/com/whd/notifflashlight/NotifFlashlightService.java#l132) – WHDeveloper 2013-10-21 19:13:47

+0

感谢兄弟为我工作:) – Sourabh 2014-02-15 07:36:49

+0

这并没有工作我的Nexus 5与棒棒糖。不过,它的确在索尼Z3上使用了KitKat。需要一个真正的PreviewDisplay – Gober 2014-12-22 09:53:23