2014-01-11 4 views
3

У меня есть службы, которые делают сигналы вспышки мигания:Как создать быстрые или медленные вспышки вспышки камеры в Android?

public class FlashBlinkService extends Service 
    { 
     private static Camera cam = null; 
     private Handler handler = new Handler(); 

     @Override 
     public IBinder onBind(Intent intent) 
     { 
      return null; 
     } 

     @Override 
     public void onCreate() 
     { 
      super.onCreate(); 
      startFlashBlink();  
     } 

     //for simulating flash blink 
     Runnable flashBlinkRunnable = new Runnable() 
     { 
      public void run() 
      { 
       cam = Camera.open(); 
       Parameters p = cam.getParameters(); 
       p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
       cam.setParameters(p); 
       cam.startPreview(); 
       p.setFlashMode(Parameters.FLASH_MODE_OFF); 
       cam.setParameters(p); 
       cam.stopPreview(); 
       cam.release(); 
       cam = null; 
       //---> 
       handler.post(flashBlinkRunnable); 
      }  
     }; 

     //start flash blink light 
     public void startFlashBlink() 
     { 
      flashBlinkRunnable.run(); 
     } 

     //stop flash blink light 
     public void stopFlashBlink() 
     { 
      handler.removeCallbacks(flashBlinkRunnable); 
      stopCamera(cam); 
     } 

     //stop camera 
     private void stopCamera(Camera cam) 
     { 
      if (cam != null) 
      { 
       cam.stopPreview(); 
       cam.release(); 
       cam = null; 
      } 
     } 

     @Override 
     public void onDestroy() 
     { 
      super.onDestroy(); 
      handler.removeCallbacks(flashBlinkRunnable); 
      stopCamera(cam); 
     } 
    } 

Это «быстрой» вспышка решения мигания прямо сейчас для меня. Каков наилучший способ сделать более быстрые или медленные сигналы мигания вспышки? На рынке есть множество приложений (например, некоторые фонарики), которые предоставляют этот вариант. Благодарю.

ответ

4

Я выполнил это следующим образом. Частота строба (мигание вспышки) регулируется переменной sleepMS в функции Thread.sleep(). Например, если вы хотите 10 мигает с частотой 10 Гц, вы должны установить

sleepMS=(1/10)*50; 
flashCount=10; 

Или более общий:

sleepMS=(1/Hz)*1000/2 

Не уверен, что это лучший способ для достижения этой цели, но это работает.

Camera cam; 
Parameters params; 

private void main(){ 
    cam = Camera.open(); 
    params = cam.getParameters(); 
    cam.setPreviewTexture(new SurfaceTexture(0)); 
    cam.startPreview(); 

    for (int i = 0; i < flashCount; i++) { 
     flipFlash(); 
     Thread.sleep(sleepMS); 
     flipFlash(); 
     Thread.sleep(sleepMS); 
    } 
    cam.stopPreview(); 
    cam.release(); 
} 

private void flipFlash(){ 
    if (isLighOn) { 
     params.setFlashMode(Parameters.FLASH_MODE_OFF); 
     cam.setParameters(params); 
     isLighOn = false; 
    } else{ 
     params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     cam.setParameters(params); 
     isLighOn = true; 
    } 
} 
+0

Спасибо Wizche, это работает. ;) – Kostadin

+0

Если это ответ, вы можете принять его как «Правильный ответ»? благодаря – Wizche

0

Вы можете создать новую тему и после каждого TURNON/выключает спать нить до тех пор, как вы хотите, чтобы пауза быть

Смежные вопросы