2017-09-10 2 views
1

현재 min sdk가 19 인 안드로이드 앱을 개발 중이며 26 시까 지 지원하고 있습니다. 이번 주에는 활동에 카메라 기능을 추가했으며, 이걸 디버깅하는 일은 터무니없이 어렵습니다.API 22 의도에 의한 카메라 문제 :

기본적으로 사용자는 카메라 아이콘을 클릭하고 인 텐트를 통해 Android 카메라를 시작하고 사용자가 사진을 찍은 다음 저장 한 다음 카메라 의도를 시작하기 전에보고 있던 슬라이더 갤러리에 추가합니다.

결국 19, 21, 23, 24, 25 및 26 API에서 작업하게되었습니다 ... 문제가되는 유일한 API는 22이며 실제로 이유를 파악할 수 없습니다. 카메라 아이콘을 클릭하면 인 텐트가 시작되고 카메라가 흰색 화면으로로드되며 앱이 다운됩니다. 키커는 이것입니다. 방금 시도했는데 제대로 작동했습니다. 앱이 성공적으로 사진을 찍어 저장하고 충돌하지 않았습니다. 이 일 후에

, 내가 다시 시도하고 나는이있어 :

09-09 17 : 19 : 22.381 6163-6163/com.android.camera의 E/카메라 : 오류 100 09-09을 17 : 19 : 22.381 6163-6163/com.android.camera E/CameraErrorCallback : Got> 카메라 오류 콜백입니다. 오류 = 100 09-09 17 : 19 : 22.381 6163-6163/com.android.camera E/AndroidRuntime : FATAL> EXCEPTION : 메인 공정> com.android.camera, PID : 6163

자바 .lang.RuntimeException : 미디어 서버가 사망했습니다. at> com.android.camera.CameraErrorCallback.onError (CameraErrorCallback.java:31) at> android.hardware.Camera $ EventHandler.handleMessage (Camera.java:1148) at> android.os.Handler.dispatchMessage (Handler .java : 102) 에있는 android.os.Looper.loop (Looper.java:135) at> android.app.ActivityThread.main (ActivityThread.java:5254) at java.lang.reflect.Method. invoke (네이티브 메소드) at> java.lang.reflect.Method.invoke (Method.java:372) at> com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) at> com.android.internal.os.ZygoteInit.main (Zy goteInit.java:698)

그리고 조금 후에 내가 다시 또 다른 오류가 발생했습니다 시도 후 ..

09-09 17 : 32 : 22.185 1530-1611/system_process E/AudioService : 미디어 서버가 사망했습니다. 09-09 17 : 32 : 22.191 4072-4072/com.android.camera E/AndroidRuntime : FATAL> EXCEPTION : 메인 공정> com.android.camera, PID : 4072

있는 java.lang. RuntimeException : getParameters가 실패했습니다. (빈 매개 변수) android.hardware.Camera.native_getParameters (기본 메소드) at> android.hardware.Camera.getParameters (Camera.java:1888) > com.android.camera.Camera. initializeZoom (Camera.java:489) at> com.android.camera.Camera.initializeFirstTime (Camera.java:392) > com.android.camera.Camera.access $ 600 (Camera.java:87) > com.android.camera.Camera $ MainHandler.handleMessage (Camera.java:290) > android.os.Handler.dispatchMessage (Handler.java:102) at> android.os.Looper.loop (Looper.java:135) at> android.app.ActivityThread.main (ActivityThread.java:5254) at java.lang.reflect .Method.invoke (네이티브 메소드) > java.lang.reflect.Method.invoke (Method.java:372) at> com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) > com.android.internal.os.ZygoteInit.main에서 (ZygoteInit.java:698) 여기

내 코드는 카메라 기능/ACTI를 호출 주위를 회전한다 vity : 결과에 대한 활동에 대한
public boolean onCreateOptionsMenu(Menu menu) { 

     item.getActionView().setOnClickListener(new View.OnClickListener() > 
      @Override 
      public void onClick(View v) { 
       startActivityForResult(CameraUtility.dispatchTakePictureIntent(getApplicationContext(), mushroomFolder), 1); 
       return; 
      } 
     }); 
    return super.onCreateOptionsMenu(menu); 
} 

의인 갤러리에 마지막으로 찍은 사진을 추가하고도 도달하지

그래서 나는 늘 그것을 포함 귀찮게 :

설정 카메라 아이콘은 청취자를 온 클릭.

그리고 heres는 내 CameraUtility에 대한 코드 :

class CameraUtility extends AppCompatActivity { 
private static String CURRENT_PHOTO_PATH; 
public static String PHOTO_DIRECTORY; 

public static void setPhotoDirectory(Context c) { 
    PHOTO_DIRECTORY = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/"; 
} 

public static Intent dispatchTakePictureIntent(Context c, String name) { 
    String timeStamp = new SimpleDateFormat("dd-MM-yyyy_HHmmss").format(new Date()); 
    String path = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/" + name + "/" + name + timeStamp + ".jpg"; 
    File file = new File(path); 
    Uri outputFileUri; 
    if (Build.VERSION.SDK_INT >= 23)   
     outputFileUri=FileProvider.getUriForFile(c, 
     "com.tracker.mushroom.fileprovider", file); 
    else 
     outputFileUri = Uri.fromFile(file); 
    CURRENT_PHOTO_PATH = file.getPath(); 
    Intent intent = new Intent(
      MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    return intent; 
} 

public static String getCurrentPhotoPath() { 
    return CURRENT_PHOTO_PATH; 
} 

public static File[] getImageFiles(Context c, String mushroomFolder) throws IOException { 
    String filePath = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/" + mushroomFolder; 
    File file = new File(filePath); 
    file.mkdirs(); 
    file.setReadable(true); 
    file.setWritable(true); 
    return file.listFiles(); 
    } 
} 

그래서 나는 내 코드의 문제, 또는 에뮬레이터 또는 다른 그 무언가가 내가 알지도 못하는 경우 경우의 경우 정말 확실하지 않다 왜냐하면 다른 모든 API가 작동하면 도움이되지 않지만 머리를 긁을 수 있기 때문입니다. 나는 getParameters() 오류가 Camera 클래스와 관련이 있다는 것을 알고 있지만, 왜 심지어 오류를 유발하는지 잘 모르겠다. 모든 입력은 환영하며 대단히 감사하겠습니다.

+0

API 관련 문제가 아니므로 충돌하는 카메라 앱입니다. API 22 에뮬레이터에서이 기능을 사용하고 계십니까? – ianhanniballake

+0

실제 장치로 작업하는 경우 단순히 장치 관련 문제 일 수 있습니다. 이상한 카메라 문제가있는 장치가 많이 있습니다. 또한 해당 장치의 기본 카메라 앱에 문제가있을 수도 있습니다. 소유자는 시스템 카메라 앱 대신 카메라 인 텐트가이를 처리하도록 지원하는 모든 앱을 설정할 수 있습니다. 심지어 시스템 카메라 앱도 덜 세련된 기기에서 버그가있을 수 있습니다. –

+0

@ianhanniballake 예, api 22 에뮬레이터, 다양한 휴대 전화. 에뮬레이터에서 제공되는 기본 카메라 앱에 문제가 있다고 이야기하고 있습니까? 왜냐하면 그것은 많은 의미를 갖기 때문입니다. – Philtron

답변

1

음, 필자는 몇 가지 추가 테스트를했으며 에뮬레이터/Android 스튜디오에서 이것을 비난 할 시점에 있다고 생각합니다. 나는 api 22와 다른 전화 모델에서 3 번의 firebase robo 테스트를 실행했습니다.

이들 각각은 카메라 작동을 계속해서 열었거나 닫았지만, 불행히도 테스트에서는 실제로 사진을 찍은 적이 없었지만 어쨌든 그 전에는 충돌이 발생했습니다.

API 22가있는 물리적 장치에서이 문제를 직접 테스트 할 수 있다면 제대로 작동하는지, 에뮬레이터/안드로이드 문제인지 확실히 알 수 있습니다. 이 시점에서 나는 심지어 로보 테스트 후 특히 이것을 시도하고 디버그 할 시간을 투자 할 가치가 있다고 느끼지 않습니다. 누군가가 이것을 유용하게 생각하고 약간의 돌연변이 유령 오류 (lol)를 좇아 시간을 절약하기를 바랍니다.

EDIT : 최종 메모로 추가하고 싶습니다 .. api 22 x86을 다운로드하여 설치하고 새로운 에뮬레이터를 만들었습니다. 더 이상 문제가 없습니다. 나는 api 22 x86_64를 사용하고 있었고 어떤 이유로 그것은 그 버전에서 작동하는 것을 좋아하지 않는다. 댓글을 달았던 사람들에게 건배. 너희들은 꽤 심술 궂 었어.