2014-09-29 99 views
6

如何检测设备背面是否有摄像头?Android/Java:检测设备是否有背面摄像头

这是我的代码来检测设备是否有一个手电筒:

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH) 
    || (_camera.getParameters().getSupportedFlashModes() != null)) hasFlashlight = true; 
else hasFlashlight = false; 

但它是TRUE,即使该设备只拥有前置摄像头没有手电筒。

+0

这个答案应该适合你:http:// stack overflow.com/questions/14399333/detecting-lack-of-rear-camera – Alboz 2014-09-29 19:52:08

+0

顺便说一句,我可以使用'Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);'只是为了打开BACK相机? – 2014-09-29 20:02:38

+1

“我可以使用Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);只需打开BACK相机?” - no,因为open()的参数不是像CAMERA_FACING_BACK这样的属性。 – CommonsWare 2014-09-29 20:07:22

回答

15

对于API> = 9:你可以使用Camera.getCameraInfo像这样的东西:

int backCameraId = -1; 
for(int i=0;i<Camera.getNumberOfCameras();i++){ 
    CameraInfo cameraInfo = new CameraInfo(); 
    Camera.getCameraInfo(i,cameraInfo); 
    if(cameraInfo.facing==CameraInfo.CAMERA_FACING_BACK) { 
     backCameraId = i; 
     break; 
    } 
} 
Log.d(TAG, "back camera exists ? "+(backCameraId>-1)); 
Log.d(TAG, "back camera id :"+backCameraId); 

对于API> = 21,建议您使用Camera2 API:

String backCameraId = null; 
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 
for(String cameraId:manager.getCameraIdList()){ 
    CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId); 
    Integer facing = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING); 
    if(facing==CameraMetadata.LENS_FACING_BACK) { 
     backCameraId = cameraId; 
     break; 
    } 
} 
Log.d(TAG, "back camera exists ? "+(backCameraId!=null)); 
Log.d(TAG, "back camera id :"+backCameraId); 
+0

我可以在Android 2.2中使用@ SuppressLint或@ TargetApi中的这些代码吗? – 2014-09-29 21:08:12

+1

此代码需要API 9+(2.2.3)请注意,Android 2.2约占市场的0.7%(https://developer.android.com/about/dashboards/index.html)。所以,如果你真的需要2.2兼容性,你需要防范这个代码(见:http://developer.android.com/training/basics/supporting-devices/platforms.html) – ben75 2014-09-30 17:47:53

+0

太棒了!我只是添加** break; **线后* backCameraId = i; *并用**“相机索引替换”相机ID:“** – 1111161171159459134 2015-06-18 01:36:28

2

尝试检查相机的数量:

import android.hardware.Camera; 

int numberOfCameras = Camera.getNumberOfCameras(); 

如果大于1,可以肯定有一个后置摄像头。

+1

谢谢,但'getNumberOfCameras()'不适用于Android 2.2或更低...(“找不到符号”) – 2014-09-29 20:05:58

+5

@YoushaAleayoub:Android 2.2及更早版本没有前置摄像头支持。因此,在这些设备上,如果它有一个摄像头,它就是一个后置摄像头。这就是说,不要只假定摄像机的数量表明是否后视 - 在其他答案中使用ben75的方法。 – CommonsWare 2014-09-29 20:08:19

+3

@YoushaAleayoub如果你需要它在Android 2.2及更高版本上工作,那么你应该添加到你的问题。 Android 2.3实际上是大多数开发者关心的最老的版本。 – Intrications 2014-09-29 20:09:19

1
public boolean isRearCameraAvailable(Context context) { 
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); 
} 

检查设备是否有相机背离设备用户