我最近注意到相机API已经被弃用,而且我找到了名为Camera2的新API。
我已经阅读了文档,但是我并不真正理解它。
所以我的问题是:如何使用新相机API预览前置摄像头?
只需要预览,不需要录制。
我想使用这个新的API,因为我猜测未来当前的相机API将会被取代并停止工作。
所以我想要有所准备,坐视每个人恐慌。XD
我最近注意到相机API已经被弃用,而且我找到了名为Camera2的新API。
我已经阅读了文档,但是我并不真正理解它。
所以我的问题是:如何使用新相机API预览前置摄像头?
只需要预览,不需要录制。
我想使用这个新的API,因为我猜测未来当前的相机API将会被取代并停止工作。
所以我想要有所准备,坐视每个人恐慌。XD
首先,找出你前置摄像头的id(如果有的话)
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
try {
return manager.getCameraIdList();
} catch (CameraAccessException e) {
return null;
}
然后像这样找到faceCamera:
CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId);
if (cameraCharacteristics == null)
throw new NullPointerException("No camera with id " + cameraId);
return cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;
最后,您必须使用该ID设置相机:
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
try {
characteristics = manager.getCameraCharacteristics(mCameraId);
} catch (CameraAccessException e) {
e.printStackTrace();
}
注意,这些只是有关如何实现你想要的内容的提示。有关如何启动预览等更多详细信息,请参阅:http://developer.android.com/samples/Camera2Basic/index.html
0表示后置摄像头,1表示前置摄像头
对于后置摄像头,在openCamera方法中需要执行以下代码:
cameraId = manager.getCameraIdList()[0];
对于前置摄像头,在openCamera方法中需要添加以下代码:
cameraId = manager.getCameraIdList()[1];
我已经将所有的代码和截图添加到这里
private void getCameraCharacteristics (){
try {
CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
for(String id : manager.getCameraIdList()){
Log.e(TAG, "Camara: Id " + id );
CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
List<CameraCharacteristics.Key<?>> listaCaracteristicas = cameraCharacteristics.getKeys();
for(CameraCharacteristics.Key<?> caracteristica : listaCaracteristicas){
Log.i(TAG, "caracteristic: " + caracteristica.getName() + " : " + cameraCharacteristics.get(caracteristica));
}
Log.i(TAG, listaCaracteristicas.toString());
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
其中一个特征是android.lens.facing
,因此根据这个值,我们可以得到前置摄像头:
if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
//Frontal camera
}
private String getIdFrontalCamera () {
try {
CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
for(String id : manager.getCameraIdList()){
CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
//Seek frontal camera.
if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
Log.i(TAG, "Camara frontal id " + id);
return id;
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
return "0";
}