Java 前摄像头使用Camera.TakePicture会导致手机崩溃

Java 前摄像头使用Camera.TakePicture会导致手机崩溃,java,android,android-camera,Java,Android,Android Camera,我正在开发一个简单的应用程序,让用户拍下自己的照片,然后对图像进行修改。这一直工作得非常出色,但现在突然尝试拍照导致整个手机崩溃 我能够“解决”这个问题的唯一方法是改变: mCamera = Camera.open(1); 致: 这对我来说没有任何意义,因为在之前的应用程序的整个生命周期中,open(1)一直工作得很好。使用以下设备时,手机甚至会崩溃: mCamera.takePicture(null, null, null); //Useless I know. Just for test

我正在开发一个简单的应用程序,让用户拍下自己的照片,然后对图像进行修改。这一直工作得非常出色,但现在突然尝试拍照导致整个手机崩溃

我能够“解决”这个问题的唯一方法是改变:

mCamera = Camera.open(1);
致:

这对我来说没有任何意义,因为在之前的应用程序的整个生命周期中,open(1)一直工作得很好。使用以下设备时,手机甚至会崩溃:

mCamera.takePicture(null, null, null); //Useless I know. Just for test purposes.
最糟糕的是,我无法得到问题的日志,因为整个手机崩溃并重新启动。如果我尝试在模拟器中运行它,它运行得很好。即使进行了大量的搜索,我也没有发现有人使用摄像头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());
        }
    }
}
int-cameraCount=0;
Camera.CameraInfo CameraInfo=新的Camera.CameraInfo();
cameraCount=Camera.getNumberOfCameras();
对于(int-camIdx=0;camIdx

这也打开了前置摄像头并允许我预览,与mCamera=camera.open(1)相同;但拍照时仍会使手机崩溃。

首先检查您的手机是否有您正在通过的
摄像头。这是获取后置摄像头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; 
} 
public int getCamera()
{ 
int numCameras=Camera.getNumberOfCameras();
camerRainfo camerRainfo=新的camerRainfo();
对于(int i=0;i
好吧,代码有一个主要问题,你正在硬编码一个摄像头id,这是一个随时会爆炸的炸弹,而不是你必须执行以下操作:

你需要使用 查看是否有多个摄影机,并查询CameraInfo

获取数码相机

格特卡梅里沃

并使用常量

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;
  }
}
intcameraid=-1;
int numberOfCameras=Camera.getNumberOfCameras();
对于(int i=0;i
希望有帮助


问候

Camera.open(int)
需要一个有效的摄像头id。
getNumberOfCameras()
告诉你什么?即使我也面临同样的问题,但在我的情况下,应用程序冻结,我得到错误100我已经释放了摄像头对象,但仍然遇到了错误100你找到了吗?我也有同样的问题。当我尝试拍照时,整个手机会重新启动!!这段代码应该在编程上对您有所帮助,现在您只需要确保您没有删除清单中的摄像头权限,并且您应该可以继续…清单仍然有:不幸的是,手机仍然崩溃。
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;
  }
}