2015-03-29 4 views
0

Я хочу сделать вспышку камеры вспышкой. Мой код заставит его мгновенно мигать одним нажатием кнопки, но если я снова нажму кнопку, пока он не закончит мигать, это приведет к сбою моего приложения. Я считаю, что мне нужно как-то проверить, все ли мигает, прежде чем я попытаюсь снова запустить вспышку.Сделать вспышку камеры вспышкой

public class BlinkBack { 
public static void blink(MainActivity ma){ 
    if (ma.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){ 
     final Camera mCamera = Camera.open(); 
     new CountDownTimer(5000, 100) { 
      int counter = 0; 
      public void onTick(long millisUntilFinished) { 
       if (counter % 2 == 0) { 
        Camera.Parameters params = mCamera.getParameters(); 
        params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
        mCamera.setParameters(params); 
        mCamera.startPreview(); 
       } 
       else { 
        Camera.Parameters params = mCamera.getParameters(); 
        params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
        mCamera.setParameters(params); 
        mCamera.stopPreview(); 
       } 
       counter++; 
      } 

      public void onFinish() { 
       Camera.Parameters params = mCamera.getParameters(); 
       params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
       mCamera.setParameters(params); 
       mCamera.stopPreview(); 
       mCamera.release(); 
      } 
     }.start(); 
    } 
} 

}

+0

'ma.getPackageManager(). hasSystemFeature (PackageManager.FEATURE_CAMERA_FLASH' возвращает истину, если вспышка доступна, поэтому он не должен выполнять код, если вспышка недоступна. Авария может быть случайной. Что делать, если вы помещаете 'if (ma.getPackageManager(). hasSystemFeature (PackageManager.FEATURE_CAMERA_FLASH) {// make blink}' за пределами вызов метода, а не внутри метода blink? – Jbwilliams1

ответ

0

Я нашел свой собственный ответ. final Камера mCamera = Camera.open(); имеет неконтролируемый RuntimeException, так что я только что съел что исключение с попыткой поймать и установил ее

public class BlinkBack { 
public static void blink(MainActivity ma){ 
    if (ma.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){ 
     try { 
      final Camera mCamera = Camera.open(); 
      new CountDownTimer(5000, 100) { 
       int counter = 0; 
       public void onTick(long millisUntilFinished) { 
        if (counter % 2 == 0) { 
         Camera.Parameters params = mCamera.getParameters(); 
         params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
         mCamera.setParameters(params); 
         mCamera.startPreview(); 
        } 
        else { 
         Camera.Parameters params = mCamera.getParameters(); 
         params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
         mCamera.setParameters(params); 
         mCamera.stopPreview(); 
        } 
        counter++; 
       } 

       public void onFinish() { 
        Camera.Parameters params = mCamera.getParameters(); 
        params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
        mCamera.setParameters(params); 
        mCamera.stopPreview(); 
        mCamera.release(); 
       } 
      }.start(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}

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