마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

바코드 스캐너에 플래시를 달아서 플래시를 켜자 미리보기(preview)가 멈춰버립니다

0 추천
바코드 스캐너를 Zxing 라이브러리를 이용해서 구현했습니다.

그리고 바코드 스캐너 액티비티에 플래시온오프 버튼달아서 플래시기능을 추가했습니다.

그런데 플래시를 켜면 바로 앱이 죽는데요

public void requestAutoFocus(Handler handler, int message) {

   if (camera != null && previewing) {
     autoFocusCallback.setHandler(handler, message);
     // Log.d(TAG, "Requesting auto-focus callback");
     camera.autoFocus(autoFocusCallback);  // <<<<<<< 여기서 죽습니다.
   }
}
********* Error Log ******************************************

java.lang.RuntimeException: autoFocus failed
at android.hardware.Camera.native_autoFocus(Native Method)                            
at android.hardware.Camera.autoFocus(Camera.java:1297)
at com.google.zxing.client.android.camera.CameraManager.requestAutoFocus(CameraManager.java:222)                                                                        
at com.google.zxing.client.android.CaptureActivityHandler.handleMessage(CaptureActivityHandler.java:75)                                                     
at android.os.Handler.dispatchMessage(Handler.java:102)                                              
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6646)                                                                        
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)                                                                        
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

 

그래서 아래처럼 플래시가 ON되었을때 코드를 막아보았습니다.

 public void requestAutoFocus(Handler handler, int message) {
   if (isFlashOn) return;  // <<<<<<< 이렇게 막았습니다.

   if (camera != null && previewing) {
     autoFocusCallback.setHandler(handler, message);
     //Log.d(TAG, "Requesting auto-focus callback");
     camera.autoFocus(autoFocusCallback);  
   }
 }
 

그러자 크래쉬는 나지 않으나 카메라 프리뷰가 프리징이 되었습니다.

즉, 플래시를 켜면 카메라 미리보기 화면이 플래시를 누른 시점에서 멈춥니다. 앱이 멈춘것은 아닙니다.

로그캣에는 다음과 같은메시지가 나옵니다.

 

I/Choreographer: Skipped 38 frames!  The application may be doing too much work on its main thread.
E/Camera: Error 2
 

 

플래시 온오프 코드는 아래와 같이 구현하였습니다.

 

private void setFlash(boolean turnOn) {
    Camera camera;
    if (turnOn) {

      camera = CameraManager.get().getCamera().open();
      Camera.Parameters p = camera.getParameters();
      p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
      camera.setParameters(p);
      camera.startPreview();
    } else {

      camera = CameraManager.get().getCamera().open();
      Camera.Parameters p = camera.getParameters();
      p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
      camera.setParameters(p);
      camera.stopPreview();
    }
  }
 

 

뭐가 문제일까요 도와주세요...ㅠㅠ
정신분열 (140 포인트) 님이 2018년 2월 1일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...