2016-05-09 5 views
0

Ich schreibe die Kamera-Anwendung. Ich habe angefangen mit android.hardware.Camera und entsprechenden Klassen. Aber von Zeit zu Zeit konnte meine Anwendung keine Verbindung zur Kamera herstellen. Dies hängt vom Gerätemodell und der Android-Version ab. Aber wenn Anwendung auf einem Gerät funktioniert, nach ein oder zwei Tagen beginnt es zu scheitern. Eine weitere Sache, die ich bemerkt habe - wenn meine App keine Verbindung herstellen kann, kann die integrierte Kamera-App auch keine Verbindung herstellen.Instabile Kamera Verhalten auf Android

Ich las fast alle Beiträge zu Camera API und verwandten Ausnahmen auf Stackoverflow und entschied, meinen Code durch CommonsGuy Bibliothek https://github.com/commonsguy/cwac-cam2 zu ersetzen. Und leider gibt es immer noch Fehler.

Ich entdeckte, dass nach Fehler kann ich Camera API wieder nur nach dem Neustart des Geräts verwenden.

Also ich möchte fragen, ist es möglich, etwas programmgesteuert zu tun, um die Kamera wieder ohne Neustart Gerät zu ermöglichen? Vielleicht gibt es eine Möglichkeit den Camera Service zu beenden oder den nativen Kamera Code hochzuladen?

Beispiel fail (Nexus 4, Android 5.1):

Fatal Exception: java.lang.RuntimeException: Fail to connect to camera service 
    at android.hardware.Camera.<init>(Camera.java:497) 
    at android.hardware.Camera.open(Camera.java:342) 
    at com.commonsware.cwac.cam2.ClassicCameraEngine$1.run(ClassicCameraEngine.java:78) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 
+0

Lassen Sie die Kamera in verschiedenen Fällen wie Ändern von vorne nach hinten oder umgekehrt, onDestroy() - Methode usw. Tun Sie einige Code: 'mCamera.stopPreview(); mCamera.release(); ' – Lawrance

+0

ich auch dieses Problem in meinem Telefon wegen des gebrochenen vorderen Kameraverbindungsstücks gegenüberstellen. Die Lösung bestand darin, das Gerät neu zu starten, während der Kameraanschluss gedrückt wurde. – Nilabja

+0

Wenn dies häufiger bei Ihrer App der Fall ist als bei der integrierten Kamera-App, weist Ihr Code einen Fehler auf und gibt die Kamera bei Bedarf nicht frei. Wenn die App stoppt, kann es zu kniffligen Thread-Kollisionen kommen, und es ist leicht, den Überblick über die Kamera zu verlieren. –

Antwort

2

Also ich möchte fragen ist es möglich, etwas programmgesteuert zu tun, um die Kamera wieder benutzen zu können, ohne das Gerät neu zu starten?

Nein, tut mir leid.

0

Überprüfung dieses ref: http://developer.android.com/training/camera/cameradirect.html diesen Code versuchen:

try 
{ 
    releaseCameraAndPreview(); 
    if (camId == 0) { 
     mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
    } else { 
     mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); 
    } 
} 

catch(Exception e) 
{ 
    Log.e(getString(R.string.app_name), "failed to open Camera"); 
    e.printStackTrace(); 
} 

Dann fügen Sie diese Funktion irgendwo:

private void releaseCameraAndPreview() { 
    myCameraPreview.setCamera(null); 
    if (mCamera != null) { 
     mCamera.release(); 
     mCamera = null; 
    } 
}