2014-09-29 60 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); 
} 

檢查設備是否有相機背離設備用戶

相關問題