En mi aplicación, me gustaría usar la cámara, si el dispositivo tiene una. ¿Hay algún dispositivo con Android que no tenga cámara? Incluyendo lo siguiente en mi manifiesto:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
entonces básicamente dice "Usaré una cámara si existe, pero no la necesito para ejecutar la aplicación".
¿Cómo puedo comprobar si existe una cámara en el dispositivo antes de intentar utilizar la clase Cámara?
android
android-camera
marca
fuente
fuente
Respuestas:
No lo he probado, pero:
private android.hardware.Camera mCameraDevice; try { mCameraDevice = android.hardware.Camera.open(); } catch (RuntimeException e) { Log.e(TAG, "fail to connect Camera", e); // Throw exception }
Puede ser lo que necesitas.
fuente
Esto es lo que estoy usando
import android.content.pm.PackageManager; PackageManager pm = context.getPackageManager(); if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { }
También hay disponibles todo tipo de cosas divertidas para probar: la brújula, la ubicación disponible, hay una cámara frontal: http://developer.android.com/reference/android/content/pm/PackageManager.html
fuente
public class YourActivity extends Activity { Context contextActivity; PackageManager pm; @Override public void onCreate(Bundle savedInstanceState) { ... contextActivity = this; pm = contextActivity.getPackageManager(); ...
Para saber cuántas cámaras hay disponibles en su dispositivo, puede llamar a:
import android.hardware.Camera; int numCameras = Camera.getNumberOfCameras(); if (numCameras > 0) { hasCamera = true; }
Camera.getNumberOfCameras () es estático, por lo que no requiere conectarse a una cámara. Esto funciona desde API 9.
Editar:
Con la API camera2 más reciente, también puede llamar a CameraManager.getCameraIdList () , que proporciona una lista de todas las ID de cámara válidas, en lugar de solo el recuento.
fuente
android.hardware.Camera
obsoleto? ¿Qué debería usarse en su lugar para esta función? Sé que ahora lo hemos hechoandroid.hardware.camera2
, pero ¿dónde podemos encontrar la alternativagetNumberOfCameras
?debe usar esto para encontrar la cámara en su dispositivo
public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY); }
fuente
public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) }
Camera.getNumberOfCameras () está obsoleto. Puedes usar:
@TargetApi(Build.VERSION_CODES.LOLLIPOP) public int getNumberOfCameras() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { return ((CameraManager) getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length; } catch (CameraAccessException e) { Log.e("", "", e); } } return Camera.getNumberOfCameras(); }
fuente
Utilice el método PackageManager.hasSystemFeature () para comprobar la cámara:
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; } }
Fuente: https://developer.android.com/guide/topics/media/camera.html#custom-camera
fuente
Prueba esto :
/** 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; } }
de: http://developer.android.com/guide/topics/media/camera.html
fuente
De la siguiente manera podemos verificar si el dispositivo tiene cámara o no.
/** Check if this device has a camera */ public static boolean checkCameraHardware(Context context) { if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA)) { return true; } else if(context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA_FRONT)) { return true; } else { return false; } }
fuente
Si está utilizando Android 2.3, hay algunas API que puede verificar el estado de su cámara, como la cantidad de cámaras (frontal y posterior)
fuente
prueba esto
Para cámara frontal
Context context = this; PackageManager packageManager = context.getPackageManager(); if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) { Utils.makeAlertDialog(context, "Has Front Camera ?", "YES"); } else { Utils.makeAlertDialog(context, "Has Front Camera ?", "NO"); }
para cámara trasera
Context context = this; PackageManager packageManager = context.getPackageManager(); if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Utils.makeAlertDialog(context, "Has back Camera ?", "YES"); } else { Utils.makeAlertDialog(context, "Has back Camera ?", "NO"); }
fuente
Según la documentación de Android:
/** 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; } }
Consulte más información sobre la API de la cámara:
https://developer.android.com/guide/topics/media/camera.html#detect-camera
fuente
Según la documentación , debe usar el Administrador de paquetes para verificar si la cámara está disponible en el dispositivo o no
En Java:
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
En Kotlin:
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
fuente
Encontré en cajas de TV Android donde puedes conectar y reproducir la cámara USB varias veces. En algún momento, el servicio de cámaras comienza a decir que detectó una cámara en el sistema mientras no hay ninguna cámara conectada al sistema. Esto sucede cuando conecta o desconecta la cámara varias veces. Para solucionarlo, encontré que esta solución funciona:
//under oncreate: //cameraManager = ((CameraManager) getSystemService(Context.CAMERA_SERVICE)); public int getNumberOfCameras() { int count_ = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { count_ = cameraManager.getCameraIdList().length; if(count_==1) { try { cameraManager.getCameraCharacteristics(cameraManager.getCameraIdList()[0]); }catch (Exception e) { count_ = 0; } } } catch (Exception e) { //e.printStackTrace(); } } else { count_ = Camera.getNumberOfCameras(); } return count_; }
fuente
Solución de una línea:
public static boolean hasCamera(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); }
Pon este método en tu clase de proyecto Utils.java.
fuente