2012-06-27 4 views

Antwort

4

Gibt es eine Möglichkeit zu finden, ob die Android-Kamera verwendet wird?

Ja, Camera.open() erhalten Sie eine Ausnahme geben, wenn die Kamera im Einsatz ist.

Vom docs,

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 
+0

Danke.Wenn festgestellt wird, dass die Kamera bereits verwendet wird, wie kann ich dann die Kamera verwenden? Ist es richtig, die Kamera im Catch-Block freizugeben und dann erneut zu versuchen, sie zu öffnen? – user1414146

+0

@ user1414146 Sie müssen warten, bis die andere Anwendung mit der Kamera fertig ist :) und dann erneut versuchen. – COD3BOY

2

Ich weiß nicht, warum diese Frage mehrmals gefragt wird, wenn Sie sich auf Ihre eigene Tätigkeit oder die Anwendung Kamera startet als Aktivität freigesetzt werden, für die Kamera laufen wird gehe in den Pausenzustand.

+5

Wenn er jedoch einen Hintergrunddienst ausführt, befindet sich die Kameraanwendung möglicherweise an der Vorderseite, während er seinen Code ausführt. – Eric

+0

Nicht alle Apps oder dieser Code verhalten sich auf diese Weise, obwohl dies für Vordergrundanwendungen empfohlen wird. – Sam

1

Ich weiß, das ist eine wirklich alte Frage, aber ich stolperte mit einer Google-Suche über das gleiche Ding. Mit den neueren Versionen von Android können Sie die CameraManager.AvailabilityCallback registrieren, um festzustellen, ob die Kamera verwendet wird oder nicht. Hier ist ein Beispielcode:

import android.hardware.camera2.CameraManager; 

    // within constructor 
    // Figure out if Camera is Available or Not 
    CameraManager cam_manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); 
    cam_manager.registerAvailabilityCallback(camAvailCallback, mHandler); 


    CameraManager.AvailabilityCallback camAvailCallback = new CameraManager.AvailabilityCallback() { 
    public void onCameraAvailable(String cameraId) { 

     cameraInUse=false; 
     Log.d(TAG, "notified that camera is not in use."); 

    } 

    public void onCameraUnavailable(String cameraId) { 

     cameraInUse=true; 
     Log.d(TAG, "notified that camera is in use."); 

    } 
}; 
+0

Hinweis, es gibt einen Fehler in Android 5.1, dass dies möglicherweise kaputt ist - https://code.google.com/p/android/issues/detail?id=164769. Für diese Versionen müssen Sie '' '' cam_manager.getCameraIdList() '' 'aufrufen, damit der Dienst ordnungsgemäß initialisiert wird, bevor Sie AvailabilityCallback registrieren können. – PressingOnAlways

2

Sie können diese Methode versuchen.Wenn es wahr zurückgibt, wird die Kamera noch von einigen App verwendet.

Dann Toast to Benutzer anzeigen, um das Gerät neu zu starten, da die Kamera neu gestartet werden muss.