Android camera.release()或其他操作后本机相机崩溃

Android camera.release()或其他操作后本机相机崩溃,android,android-intent,camera,Android,Android Intent,Camera,当我打开相机时,我体验到奇怪的手机冻结/崩溃/灰色摄像头屏幕。我无法定期重现此错误,但它在我的一台测试设备(华为Ascend P6)上一天发生几次,但没有导致崩溃的确定步骤顺序 此外,在更罕见的情况下,通过我的应用程序在本设备上拍照会导致手机重新启动。这种行为在其他使用照相机意图的应用程序中不是问题,所以我想这是我的代码出了问题 打开摄影机意图的代码: public void openCameraForPhoto(OpenCameraForPhotoEvent event) {

当我打开相机时,我体验到奇怪的手机冻结/崩溃/灰色摄像头屏幕。我无法定期重现此错误,但它在我的一台测试设备(华为Ascend P6)上一天发生几次,但没有导致崩溃的确定步骤顺序

此外,在更罕见的情况下,通过我的应用程序在本设备上拍照会导致手机重新启动。这种行为在其他使用照相机意图的应用程序中不是问题,所以我想这是我的代码出了问题

打开摄影机意图的代码:

public void openCameraForPhoto(OpenCameraForPhotoEvent event) {
        photoUri = null;
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            File photoFile = null;
            try {
                photoFile = createImageFile();
            } catch (IOException ex) {
                showErrorToastAndFinish(errorMessage);
            }

            if (photoFile != null) {
                photoUri = Uri.fromFile(photoFile);
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        photoUri);
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        }
    }
我想,有几个人怀疑可能会导致这种不可预测的行为

首先,我使用TextureView在启动camera intent的屏幕上显示相机预览。虽然我在onPause方法中使用了camera.release(),但我想它可能不会偶尔被调用

次要,我使用另一个TextureView在同一屏幕上显示一些视频。因为我用MediaPlayer来做这件事,也许它和摄像机发生了冲突,导致了它的怪异行为?MediaPlayer是否与摄像头启动有关?也许有图片是从背景库加载的还是类似的

第三,也是我做的最不可疑的事情:打开新创建活动的摄像头。我真的不认为这是这种行为的原因,但可能设备无法处理CPU或内存峰值


因此,问题是:我能做些什么来防止这种行为,这种行为没有任何错误或异常,但会使应用程序的使用不令人满意?

您的代码没有问题,但是如果您正在显示相机预览,然后启动相机意图,如果您仍然拥有相机,则可能会出现问题。如果你正在展示预览,你真的应该通过Camera2 api而不是intent自己拍摄照片。因为我想支持从15 api开始的设备,起初我使用的是旧的Camera api,但它也造成了很多崩溃。所以我决定转向更安全的方法——使用相机。而且它在大多数设备上都非常有效,在未来的支持中问题也会少一些。我想知道,是否有办法确保我的设备在启动intent之前不拥有摄像头?