2011-04-08 9 views

Respuesta

2
CameraInfo cameraInfo = new CameraInfo(); 
    for (int i = 0; i < numberOfCameras; i++) { 
     Camera.getCameraInfo(i, cameraInfo); 
     if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {    

     } 
    } 
+0

Hola, gracias por su respuesta, pero estoy usando Android 2.2 no encuentro la clase CameraInfo. ¿Qué hacer ahora? – sureshmenon13196

+0

@suresh - ¿Puede pedirle al usuario que le indique a la aplicación si hay una cámara frontal en el dispositivo o no? –

5

Utilice el administrador de paquetes para verificar si el dispositivo es compatible con Intent. En este caso Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

public static boolean isIntentAvailable(Context context, String action) { 
    final PackageManager packageManager = context.getPackageManager(); 
    final Intent intent = new Intent(action); 
    List<ResolveInfo> list = 
      packageManager.queryIntentActivities(intent, 
        PackageManager.MATCH_DEFAULT_ONLY); 
    return list.size() > 0; 
} 
+2

Comentario del usuario sin privilegios de comentario ([perfil] (http://stackoverflow.com/users/1005899/cfg)): 'MediaStore.ACTION_IMAGE_CAPTURE' no funciona, debe usar' android.media.action.IMAGE_CAPTURE' . – Anne

0

La forma más rápida que he encontrado para comprobar si existe un (backfacing) es la cámara para comprobar si Camera.open() devuelve un valor nulo.

Camera cam = Camera.open(); 
if(null == cam){ 
    //no camera exists 
} 

Esto debería estar disponible para las versiones anteriores de Android también.

39

Lo que sugeriría es similar a la respuesta del doc_180, pero debería ser capaz de detectar tanto la cámara frontal como la trasera incluso para Froyo, aunque si no me equivoco, Froyo nunca admitió las cámaras frontales, así que siempre obtienes una respuesta falsa para frontCam en Froyo.

PackageManager pm = getPackageManager(); 
boolean frontCam, rearCam; 

//Must have a targetSdk >= 9 defined in the AndroidManifest 
frontCam = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT); 
rearCam = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); 

EDIT: Acabo de dar cuenta de que esta es una pregunta muy, muy vieja. Oh, bueno, espero que ayude a alguien en el futuro.

+1

Gracias por esto :) – Malachi

+2

Tenga en cuenta que puede compilar su aplicación con Android 2.3 o superior y aún así hacerlo compatible con Android 2.2. Recuerde que las constantes como 'PackageManager.FEATURE_CAMERA_FRONT' en realidad están codificadas por el compilador, por lo que no fallarán en el tiempo de ejecución en Android 2.2 o versiones posteriores. – Cristian

+0

Gracias. Me ayudó =] –

-1

Prueba de esto, esto funcionó para mí en una Moto RAZR HD:

public static Camera open (int cameraId) 

Ejemplo de uso:

mCamera = Camera.open(1); 
+4

¿cómo diablos responde eso a la pregunta? – andr

0

se puede utilizar este método estático si lo que desea saber cuántas cámaras hay son: Camera.getNumberOfCameras(); (api 9)

0
/** Check if this device has a camera */ 
private boolean checkCameraHardware(Context context) { 
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){ 
     // this device has a camera 
     return true; 
    } else { 
     // no camera on this device 
     return false; 
    } 
} 
+0

Esto devolverá falso para dispositivos sin cámara trasera como el Nexus 7. –

+1

En su lugar, debería intentar FEATURE_CAMERA_ANY. – MCLLC

+0

FEATURE_CAMERA_ANY es el camino correcto, pero solo funciona en API 17 y superior. – Galya

Cuestiones relacionadas