2017-05-01 4 views
0

실제 장치에서 카메라 애플리케이션을 처리하는 데 문제가 있습니다. 내가 genymotion 에뮬레이터 버전 4.4.2 (API 19)에서 내 응용 프로그램을 실행할 때 그것은 잘 작동 ..하지만 내 실제 장치 Huawei P9 Lite 버전 6 (API 23)에서 실행할 때 충돌이 발생합니다. "나는 내가이에서 어쩌면 생각"android.hardware.camera가되지 않습니다 "하고 내가 사용하는 것을 볼 수있는 카메라 객체를 처리 할 우리 반에서카메라가 에뮬레이터에서 작동하지만 실제 장치에서는 작동하지 않습니다.

05-01 23:31:10.963 9308-9308/edu.sfsu.cs.orange.ocr W/CameraBase: An error 
occurred while connecting to camera: 0 
05-01 23:31:10.963 9308-9308/edu.sfsu.cs.orange.ocr E/Camera-JNI: 
android_hardware_Camera_native_setup Error: -1 
05-01 23:31:10.963 9308-9308/edu.sfsu.cs.orange.ocr E/Camera: Camera new 
cameraInitNormal:-1 

다음은 로그 캣에 표시하는 오류입니다 android.hardware.camera2 "를 대신 사용하십시오. 그러나 나는 카메라 객체를 많이 사용하고 메소드를 사용하면 코드에서 많은 변화가 일어날 것입니다. 피할 수 있습니까? 아니면이 문제가 다른 것입니까?

카메라에 대한 권한은 이미 내 매니페스트에 포함되어 난 내 빌드 파일에이 구성을 사용하고 있습니다 :

compileSdkVersion 24 
buildToolsVersion '25.0.0' 
minSdkVersion 9 
targetSdkVersion 24 

UPDATE 여기

내가 문제에서 생각하는 이유입니다 사용되지 않는 방법 :

try { 

    // Open and initialize the camera 
    cameraManager.openDriver(surfaceHolder); 

    // Creating the handler starts the preview, which can also throw a RuntimeException. 
    handler = new CaptureActivityHandler(this, cameraManager, isContinuousModeActive); 

} catch (IOException ioe) { 
    showErrorMessage("Error", "Couldn't initialize camera. Please try restarting device."); 
} catch (RuntimeException e) { 
    // Barcode Scanner has seen crashes in the wild of this variety: 
    // java.?lang.?RuntimeException: Fail to connect to camera service 
    showErrorMessage("Error", "Could not initialize camera. Please try restarting device."); 
} 

는 응용 프로그램이이 RuntimeException을 던졌습니다 내 전화에 시작합니다.

openDrive 방법 :

내가이 문제를 해결할 수있는 방법을
public synchronized void openDriver(SurfaceHolder holder) throws IOException { 
Camera theCamera = camera; 
if (theCamera == null) { 
    theCamera = Camera.open(); 
    if (theCamera == null) { 
    throw new IOException(); 
    } 
    camera = theCamera; 
} 
camera.setPreviewDisplay(holder); 
if (!initialized) { 
    initialized = true; 
    configManager.initFromCameraParameters(theCamera); 
    if (requestedFramingRectWidth > 0 && requestedFramingRectHeight > 0) { 
    adjustFramingRect(requestedFramingRectWidth, requestedFramingRectHeight); 
    requestedFramingRectWidth = 0; 
    requestedFramingRectHeight = 0; 
    } 
} 
configManager.setDesiredCameraParameters(theCamera); 

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
reverseImage = prefs.getBoolean(PreferencesActivity.KEY_REVERSE_IMAGE, false); 
} 

어떤 생각? 미리 감사드립니다

답변

0

빠른 디버그 팁은 targetSdkVersion 19에 대한 응용 프로그램을 컴파일하는 것입니다. API 버전 사이에 카메라 인터페이스가 일부 물건을 depriciated해야합니다. 또한 직렬 터미널이나 adb를 통해 커널 로그를 볼 수있는 능력이 있다면 "Error : -1"이 하드웨어에 무엇을 의미하는지, 즉 커널의 카메라 드라이버에 실제로 도달했는지 확인할 수 있습니다.

adb root 
adb shell 
#cat /proc/kmsg 
+0

나는 액세스 할 수 없습니다! 'cat/proc/kmsg'를 실행할 때 허가가 거부되었습니다! 그리고 나는 방금 전화를 샀다. 나는 그것을 뿌리 뽑을 의도가 없다. 나의 업데이트 된 요청을 확인해 보라! – user3816569

관련 문제