如何检测设备是否有前置摄像头,如果有的话如何使用和调用前置摄像头?
如果您使用的是API级别9(Android 2.3)或更高版本,则可以执行以下操作来计算(第一个)前置摄像头的索引:
int getFrontCameraId() {
CameraInfo ci = new CameraInfo();
for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, ci);
if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i;
}
return -1; // No front-facing camera found
}
你可以使用索引来调用Camera.open
方法,例如:
int index = getFrontCameraId();
if (index == -1) error();
Camera c = Camera.open(index);
获取相关相机。你的代码不支持21以上的sdk,所以我添加了这些行使它可用 :)
int getFrontCameraId(CameraManager cManager) {
if (Build.VERSION.SDK_INT < 22) {
Camera.CameraInfo ci = new Camera.CameraInfo();
for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, ci);
if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i;
}
} else {
try {
for ( int j = 0;j<cManager.getCameraIdList().length; j++) {
String[] cameraId = cManager.getCameraIdList();
CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]);
int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT)
return j;
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
return -1; // No front-facing camera found
}
我已更新Oak的代码,现在它也支持新的camera2库。
@SuppressLint("NewApi" )
int getFrontCameraId() {
if (Build.VERSION.SDK_INT < 22) {
Camera.CameraInfo ci = new Camera.CameraInfo();
for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, ci);
if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i;
}
} else {
try {
CameraManager cManager = (CameraManager) getApplicationContext()
.getSystemService(Context.CAMERA_SERVICE);
String[] cameraId = cManager.getCameraIdList();
for ( int j = 0;j<cameraId.length; j++) {
CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]);
int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT)
return Integer.parseInt(cameraId[j]);
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
return -1; // No front-facing camera found
}