Android 初始化摄影机对象时,摄影机对象的某些时间为空
我正试图实现我自己的相机与碎片。一切都进行得很顺利,但最近我在谷歌开发者控制台看到崩溃报告,相机初始化时为空。下面是我在应用程序中初始化相机的代码Android 初始化摄影机对象时,摄影机对象的某些时间为空,android,camera,android-camera,Android,Camera,Android Camera,我正试图实现我自己的相机与碎片。一切都进行得很顺利,但最近我在谷歌开发者控制台看到崩溃报告,相机初始化时为空。下面是我在应用程序中初始化相机的代码 /** A safe way to get an instance of the Camera object. */ public static Camera getCameraInstance(int cameraType) { Camera c = null; try { c = Camera.open(camer
/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance(int cameraType) {
Camera c = null;
try {
c = Camera.open(cameraType);
} catch (Exception e) {
e.printStackTrace();
}
return c; // returns null if camera is unavailable
}
上面的代码是谷歌开发者在他们的博客上推荐的。Look camera可能会返回null,在这种情况下,我会在某些时候(并非总是)将camera对象设置为null。所以我的问题是,如何正确初始化相机以避免出现空值
注意:我关注了android开发者的博客,我以以下方式发布了暂停时的相机资源
@Override
public void onPause() {
// free up camera so that other program can use it
if (camera != null) {
camera.stopPreview();
camera.release();
paused = true;
}
// getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// // set the activity back to //whatever it needs to be when going
// back.
super.onPause();
}
我正在按以下方式初始化onResume中的相机
@Override
public void onResume() {
// resume camera
if (paused) {
paused = false;
try {
initCamera();
} catch (IOException e) {
e.printStackTrace();
}
}
super.onResume();
}
有人能告诉我为什么在某些罕见的情况下会得到空的摄影机对象吗?如果函数
camera.open(cameraType)
返回null,这是因为相机已经在使用中,或者它不存在。
因此,我认为当闪光灯应用程序使用相机时,或者如果其他应用程序没有正确关闭相机时,会出现此错误
在完成此活动之前,您需要调用
mCamera.release()
。当相机为空时,有两个选项:
是的,文件上的内容完全相同,但我得到的是空值。有没有办法检查哪个应用程序正在使用摄像头硬件?如果发现这种情况,我们是否可以释放摄像头资源@AlonsoFloo绝对不是,只有打开它的应用程序才能关闭它:除了@AlonsoFloo的答案外,只要摄像头返回null,你就可以向应用程序用户显示一个错误提示,而不是让应用程序崩溃。嘿@jsmols我知道这可能是因为提到的原因。我正在寻找可靠的解决方案或建议。无论如何,我已经按照你上面提到的方式添加了权限。你们有更多关于解决方案的提示吗?你的解释无处不在。不管怎样,谢谢你的关注,我认为你实际上能做的不多了。当相机被另一个进程使用时,这就有点结束了……不应该有这种情况,不是吗?这种情况是如何发生的?我还有一个开源项目,如果您愿意,它可以为您提供另一个示例实现:。看看录像机。initializeCameraAndPreview(),我向用户敬酒,并在无法打开相机时关闭应用程序。仅供参考:您使用和释放相机资源的代码是正确的