检查设备是否有相机?
在我的应用程序,我想使用相机,如果该设备有一个。 有没有运行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