2012-06-27 11 views

Respuesta

4

¿Hay alguna manera de saber si la cámara de Android está en uso?

Sí, Camera.open() le dará una excepción si la cámara está en uso .

Desde el 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

Thanks.If se encuentra que la cámara ya está en uso, ¿cómo puedo usar la cámara? ¿Es correcto liberar la cámara en el bloque catch y luego intentar abrirla nuevamente? – user1414146

+0

@ user1414146 Tienes que esperar hasta que la otra aplicación esté hecha con la cámara :) y luego volver a intentarlo. – COD3BOY

2

No sé por qué esta pregunta se le ha pedido varias veces, una vez que comience a su propia actividad o una cámara propia aplicación se dará a conocer como la actividad de correr para la cámara será entrar en estado de pausa.

+5

Pero si está ejecutando un servicio en segundo plano, entonces la aplicación de la cámara podría estar en la parte delantera mientras ejecuta su código. – Eric

+0

No todas las aplicaciones o códigos se comportan de esta manera, aunque es lo que se recomienda para las aplicaciones de primer plano. – Sam

1

Sé que esta es una pregunta muy antigua, pero me encontré con una búsqueda de google preguntando sobre lo mismo. Con las versiones más nuevas de Android, puede registrar el CameraManager.AvailabilityCallback para determinar si la cámara está en uso o no. Aquí hay un código de ejemplo:

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

Nota, hay un error en Android 5.1 que podría estar roto - https://code.google.com/p/android/issues/detail?id=164769. Para esas versiones, tendrás que llamar a '' 'cam_manager.getCameraIdList()' '' para que el servicio se inicialice correctamente antes de que puedas registrarAvailabilityCallback. – PressingOnAlways

2

Puede probar este método. Si devuelve cierto, entonces la cámara todavía está siendo utilizada por alguna aplicación.

public boolean isCameraUsebyApp() { 
    Camera camera = null; 
    try { 
     camera = Camera.open(); 
    } catch (RuntimeException e) { 
     return true; 
    } finally { 
     if (camera != null) camera.release(); 
    } 
    return false; 
} 

A continuación, muestre brindis al usuario para reiniciar el dispositivo ya que la cámara necesita reiniciarse.

Cuestiones relacionadas