private Camera openCamera(){
Camera camera = null;
try{
Class<?> cameraClass = Class.forName("android.hardware.Camera");
Object cameraInfo = null;
Field field = null;
int cameraCount = 0;
Method getNumberOfCamerasMethod = cameraClass.getMethod("getNumberOfCameras");
if(getNumberOfCamerasMethod != null){
cameraCount = (Integer) getNumberOfCamerasMethod.invoke(null, (Object[]) null);
Log.i(TAG, "cameraCount: " + cameraCount);
}
Class<?> cameraInfoClass = Class.forName("android.hardware.Camera$CameraInfo");
if(cameraInfoClass != null){
cameraInfo = cameraInfoClass.newInstance();
}
if(cameraInfo != null){
field = cameraInfo.getClass().getField("facing");
}
Method getCameraInfoMethod = cameraClass.getMethod("getCameraInfo",Integer.TYPE,cameraInfoClass);
if(getCameraInfoMethod != null && cameraInfoClass != null && field != null){
for(int camIndex = 0; camIndex < cameraCount; camIndex ++){
getCameraInfoMethod.invoke(null, camIndex,cameraInfo);
int facing = field.getInt(cameraInfo);
Log.i(TAG, "facing: " + facing);
Log.i(TAG, "camIndex: " + camIndex);
if(facing == 0){
try{
Method cameraOpenMethod = cameraClass.getMethod("open", Integer.TYPE);
if(cameraOpenMethod != null){
// Field frontCameraId = cameraInfo.getClass().getField("CAMERA_FACING_FRONT");
// if(frontCameraId != null){
// int cameraId = frontCameraId.getInt(cameraInfo);
// camera = (Camera) cameraOpenMethod.invoke(null, cameraId);
// }
// else{
// camera = (Camera) cameraOpenMethod.invoke(null, camIndex);
// }
camera = (Camera) cameraOpenMethod.invoke(null, camIndex);
Method unlock = camera.getClass().getDeclaredMethod("unlock");
unlock.invoke(camera);
}
}catch (RuntimeException e) {
// TODO: handle exception
Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
}
break;
}
if(facing == 1){
// Camera.CameraInfo.CAMERA_FACING_FRONT
try{
Method cameraOpenMethod = cameraClass.getMethod("open", Integer.TYPE);
if(cameraOpenMethod != null){
camera = (Camera) cameraOpenMethod.invoke(null, camIndex);
Method unlock = camera.getClass().getDeclaredMethod("unlock");
unlock.invoke(camera);
}
}catch (RuntimeException e) {
// TODO: handle exception
Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
}
break;
}
}
}
}
catch (ClassNotFoundException e){
Log.e(TAG, "ClassNotFoundException" + e.getLocalizedMessage());
}
catch (NoSuchMethodException e){
Log.e(TAG, "NoSuchMethodException" + e.getLocalizedMessage());
}
catch (NoSuchFieldException e){
Log.e(TAG, "NoSuchFieldException" + e.getLocalizedMessage());
}
catch (IllegalAccessException e){
Log.e(TAG, "IllegalAccessException" + e.getLocalizedMessage());
}
catch (InvocationTargetException e){
Log.e(TAG, "InvocationTargetException" + e.getLocalizedMessage());
}
catch (InstantiationException e){
Log.e(TAG, "InstantiationException" + e.getLocalizedMessage());
}
catch (SecurityException e){
Log.e(TAG, "SecurityException" + e.getLocalizedMessage());
}
if(camera == null){
try{
camera = Camera.open();
}catch (RuntimeException e) {
// TODO: handle exception
Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
}
}
return camera;
}
android 打开摄像头的代码
最新推荐文章于 2024-08-24 11:00:57 发布