我正在制作一个简单的应用程序,让用户可以拍摄自己的照片,然后对图像进行修改。这一直在精彩地工作,但现在突然试图拍照导致整个手机崩溃。
我能够解决问题的唯一方法。问题一直在变化:
mCamera = Camera.open(1);
为:
mCamera = Camera.open();
这对我来说没有意义,因为Camera.open(1)在应用程序的整个生命周期中一直运行良好。使用时手机甚至会崩溃:
mCamera.takePicture(null, null, null); //Useless I know. Just for test purposes.
最糟糕的是,由于整个手机崩溃并重新启动,我无法获得问题的logcat。如果我尝试在模拟器中运行它,它运行得很好。即使有大量的搜索,我还没有发现任何有相机api的人导致整个手机崩溃。
所以我想我的问题是,是否有人知道可能导致这种情况的原因是什么?或者我可能会开始寻找解决方法吗?
编辑: 我应该补充一点,我也尝试过使用:
int cameraCount = 0;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
try {
mCamera = Camera.open(camIdx);
} catch (RuntimeException e) {
Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
}
}
}
这也开启了前置摄像头并允许我预览,与mCamera = Camera.open(1)相同;但拍照时手机仍然会崩溃。
答案 0 :(得分:0)
首先检查您的手机camera
是否正在传递。这是获取后置摄像头ID的辅助方法。
public int getCamera()
{
int numCameras = Camera.getNumberOfCameras();
CameraInfo cameraInfo = new CameraInfo();
for (int i = 0; i < numCameras; i++)
{
Camera.getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK)
{
return i;
}
}
return -1;
}
答案 1 :(得分:0)
嗯,这是代码的一个主要问题,你正在硬编码一个摄像机ID,而且这个炸弹会随时爆炸,而你必须做以下事情:
你需要使用 http://developer.android.com/reference/android/hardware/Camera.html查看它是否有多个摄像头,并查询CameraInfo
getNumberOfCameras
getCameraInfo
并使用常量
int CAMERA_FACING_BACK相机的朝向与屏幕相反。
int CAMERA_FACING_FRONT摄像机的朝向与屏幕相同。
获得所需相机的信息后,必须使用其提供的任何ID来打开相机。
这样的事情:
int cameraId = -1;
int numberOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numberOfCameras; i++) {
CameraInfo info = new CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
Log.d(DEBUG_TAG, "Camera found");
cameraId = i;
break;
}
}
希望它有所帮助!
问候!