2017-05-01 10 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 

:ここでLogcatに示したエラーであります代わりに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を経由してカーネルログを見る機能を持っている場合、ハードウェアに「エラー:-1」が何を意味するのか、つまり実際にカーネルのカメラドライバに到達していますか?

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

私はアクセス権がありません! 'cat/proc/kmsg'を実行すると許可が拒否されました!私はちょうど電話を買ったので、私はそれを根絶するつもりはありません..私の更新された要求を確認してください! – user3816569

関連する問題