检查设备是否有相机?

在我的应用程序,我想使用相机,如果该设备有一个。 有没有运行Android的设备没有相机? 通过在我的清单中包含以下内容:

<uses-feature android:name="android.hardware.camera" android:required="false"/> 

那么它基本上就是说“如果存在,我将使用相机,但不需要运行应用程序”。

在尝试使用相机类之前,我如何检查设备上是否存在相机?

我没有尝试过,但是:

 private android.hardware.Camera mCameraDevice; try { mCameraDevice = android.hardware.Camera.open(); } catch (RuntimeException e) { Log.e(TAG, "fail to connect Camera", e); // Throw exception } 

可能是你需要的。

这是我正在使用的

 import android.content.pm.PackageManager; PackageManager pm = context.getPackageManager(); if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { } 

各种其他有趣的事情来testing也可用 – 指南针,位置可用,有没有一个前置摄像头: http : //developer.android.com/reference/android/content/pm/PackageManager.html

要了解您的设备上有多less台摄像机,请致电:

 import android.hardware.Camera; int numCameras = Camera.getNumberOfCameras(); if (numCameras > 0) { hasCamera = true; } 

Camera.getNumberOfCameras()是静态的,所以它不需要实际连接到相机。 这从API 9开始工作。

编辑:

使用较新的camera2 API,您也可以调用CameraManager.getCameraIdList() ,该列表提供所有有效的摄像头ID列表,而不仅仅是计数。

你应该使用这个在你的设备中find相机

 public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY); } 

Camera.getNumberOfCameras()已弃用。 您可以使用:

 @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(); } 

通过以下方式我们可以检查设备是否有摄像头。

 /** 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; } } 

如果您使用的是Android 2.3,则有一些API可以检查相机的状态,例如相机数量(正面和背面)

尝试这个

对于前置摄像头

  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"); } 

为后面照相机

  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"); } 

尝试这个 :

 /** 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; } } 

来自: http : //developer.android.com/guide/topics/media/camera.html

使用PackageManager.hasSystemFeature()方法检查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; } } 

来源: https : //developer.android.com/guide/topics/media/camera.html#custom-camera