如何检测是否有前置摄像头,以及如何达到并使用前置摄像头?
答
如何检测是否有前置摄像头,以及是否有如何到达并使用前置摄像头?
有没有API,至少通过Android 2.2。幸运的是,即将推出的Gingerbread版本将增加对前置摄像头的内置支持。抱歉!
+0
谢谢您的回答。 – shiz 2010-10-14 22:34:03
答
如果使用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);
来获得相关的相机。
答
Oak的代码将不支持SDK 21以上,所以我已经添加了这些行,使其可用:)
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
}
我已经更新橡树的代码,现在支持新camera2库还。
答
Kalpit,我不知道你是如何设法让代码工作的。我试图编辑你的答案,但完整的答案需要改变。这是我得到的。
@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
}
相关:http://*.com/questions/3922042/how-to-detect-android-front-camera-programmatically(但没有答案的话) – 2010-10-14 21:31:27