Android 如何检测摄像头的编号';安卓设备上有什么?如果设备有前置摄像头,如何使用?

Android 如何检测摄像头的编号';安卓设备上有什么?如果设备有前置摄像头,如何使用?,android,Android,如何检测android设备中没有可用的摄像头?如果设备有前置摄像头,如何使用它?CameraInfo-CameraInfo=new-CameraInfo(); CameraInfo cameraInfo = new CameraInfo(); for (int i = 0; i < numberOfCameras; i++) { Camera.getCameraInfo(i, cameraInfo); if (cameraInfo.facin

如何检测android设备中没有可用的摄像头?如果设备有前置摄像头,如何使用它?

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

        }
    }
对于(int i=0;i
使用packagemanager检查设备是否支持此目的。在这种情况下,
Intent Intent=newintent(MediaStore.ACTION\u IMAGE\u CAPTURE

publicstaticboolean ISintentavable(上下文、字符串操作){
final-PackageManager-PackageManager=context.getPackageManager();
最终意图=新意图(行动);
列表=
packageManager.QueryInputActivities(意图,
PackageManager.MATCH_(仅限默认值);
返回列表.size()>0;
}

检查(背面)摄像头是否存在的最快方法是检查camera.open()是否返回null

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

这应该也适用于早期版本的android。

我的建议与doc_180的答案类似,但即使对于Froyo,也应该能够同时检测正面和背面摄像头,尽管如果我没有弄错的话,Froyo从不支持正面摄像头,因此,对于Froyo上的
frontCam
,您总是会得到错误的响应

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

编辑:刚刚意识到这是一个非常非常古老的问题。哦,好吧,希望它对将来的人有帮助。

试试这个,这在Moto RAZR HD中对我很有用:

public static Camera open (int cameraId)
用法示例:

mCamera = Camera.open(1);

如果您只想知道有多少个摄像头,可以使用此静态方法:
Camera.getNumberOfCameras();(api 9)

我正在使用此方法获取可用相机的计数

 public int getCameraCount(){
    CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    try {
        String[] strings = manager.getCameraIdList();
        return strings.length;
    } catch (CameraAccessException e) {
        e.printStackTrace();
        return 0;
    }
}

您好,谢谢您的回复,但我使用的是android 2.2,我找不到Cameranfo类。现在该怎么办?@suresh-你能让用户告诉应用程序设备中是否有前置摄像头吗?用户在没有评论权限的情况下进行评论():
MediaStore。操作\u IMAGE\u CAPTURE
不起作用,你应该使用android.media.action.IMAGE\u CAPTURE。请记住,你可以使用android 2.3或更高版本编译你的应用程序,并使其与android 2.2兼容。请记住,
PackageManager.FEATURE\u CAMERA\u FRONT
等常量实际上是由编译器硬编码的,因此,它在Android 2.2或更早版本上运行时不会失败。这究竟是如何回答这个问题的?对于没有后置摄像头的设备,如Nexus 7,这将返回false。应该尝试使用FEATURE_camera_ANY。FEATURE_camera_ANY是正确的方法,但它只适用于API 17及以上版本。
/** 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;
    }
}
 public int getCameraCount(){
    CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    try {
        String[] strings = manager.getCameraIdList();
        return strings.length;
    } catch (CameraAccessException e) {
        e.printStackTrace();
        return 0;
    }
}