【发布时间】:2013-01-02 04:30:06
【问题描述】:
我的应用具有需要后置摄像头的功能。是否有前置摄像头与我的需求无关。事实证明,在所有情况下,建立一个强大的程序来检测是否存在后置摄像头是很棘手的。例如,使用 HTC Evo 3D 的用户抱怨该应用程序说没有后置摄像头(显然有),我也收到过其他用户的许多类似投诉。
这是一件很难测试的事情,因为尽管有很多设备,但我没有只有前置摄像头的设备,例如 Nexus 7,或者用户提到的任何型号。
这是我所拥有的,这是从本网站上其他答案的代码中获取的:
boolean rearCameraFound = false;
if(BUILD_VERSION > 8){
int cameraCount = 0;
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
Camera.getCameraInfo( camIdx, cameraInfo );
if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK ) {
try {
cam = Camera.open( camIdx );
Log.d("TAG", "Rear camera detected");
rearCameraFound = true;
} catch (RuntimeException e) {
Log.e("TAG", "Camera failed to open: " + e.getLocalizedMessage());
}
}
if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) {
Log.d("TAG", "Front camera detected");
}
}
return rearCameraFound;
}else{
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
我现在用这个更简单的版本替换了这段代码:
PackageManager pm = context.getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
但是,我不知道在 Nexus 7 上会发生什么,例如,只有前置摄像头。这会返回 true 吗?
我正在寻找可以确定是否有后置摄像头的代码!
【问题讨论】:
-
仅供参考,此代码在 Nexus 7 running stock JB 4.2 上返回 false
-
Sahil - 过去我曾尝试这样做,但被告知我没有足够的声誉来这样做。我想我现在已经知道了,所以一定要解决我的问题并确保完成,谢谢。