Android 种植活动';s在应用程序库中保存操作结果';s ANR

Android 种植活动';s在应用程序库中保存操作结果';s ANR,android,Android,我编写了一个带有按钮的应用程序,用方法startActivityForResult调用活动拍照。调用onActivityResult时,应用程序会转到裁剪活动来裁剪我刚才使用方法startActivityForResult拍摄的图像。但当我保存它时,gallery应用程序总是停止,返回应用程序未响应错误,这导致onActivityResult方法中的参数resultCode为0,即结果\u已取消 代码就是onCreate(),onActivityResult(),以及以下变量: public s

我编写了一个带有按钮的应用程序,用方法
startActivityForResult
调用活动拍照。调用onActivityResult时,应用程序会转到裁剪活动来裁剪我刚才使用方法
startActivityForResult
拍摄的图像。但当我保存它时,gallery应用程序总是停止,返回应用程序未响应错误,这导致
onActivityResult
方法中的参数resultCode为0,即
结果\u已取消

代码就是onCreate(),
onActivityResult()
,以及以下变量:

public static final int TAKE_PHOTO = 1;

public static final int CROP_PHOTO = 2;

private Button takePhoto;

private ImageView picture;

private Uri imageUri;
onCreate():

onActivityResult():

相关日志:

06-28 10:30:35.750 1682-1694/?W/CameraCaptureSession﹕ 会话0:相机设备已关闭: java.lang.IllegalStateException:CameraDevice已关闭 在android.hardware.camera2.impl.CameraDeviceImpl.checkifcameraclosedornError(CameraDeviceImpl.java:1482) 在android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:677) 在android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:328) 在android.hardware.camera2.impl.CameraCaptureSessionImpl.finalize(CameraCaptureSessionImpl.java:561) 位于java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:191) 位于java.lang.Daemons$FinalizerDaemon.run(Daemons.java:174) 运行(Thread.java:818) 06-28 10:30:38.200 483-561/? 带音轨﹕ 音频\u输出\u标志\u快速被客户端拒绝 06-28 10:30:38.205 1589-1782/? D/skia﹕ --- SkImageDecoder::工厂返回null 06-28 10:30:38.205 1589-1782/? W/cropacitivity﹕ 无法打开文件的区域解码器:file:///storage/emulated/0/output_image.jpg java.io.IOException:不支持图像格式 位于android.graphics.BitMapRegionCoder.NativenWinstance(本机方法) 位于android.graphics.BitMapRegionCoder.newInstance(BitMapRegionCoder.java:124) 在com.android.gallery3d.filtershow.crop.CropActivity$BitmapIOTask.doInBackground(CropActivity.java:483) 在com.android.gallery3d.filtershow.crop.CropActivity$BitmapIOTask.doInBackground(CropActivity.java:355) 在android.os.AsyncTask$2.call(AsyncTask.java:292) 位于java.util.concurrent.FutureTask.run(FutureTask.java:237) 在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 运行(Thread.java:818) 06-28 10:30:38.206 1589-1782/? D/skia﹕ --- SkImageDecoder::工厂返回null

而且,有时这种情况不会发生,这对我来说是不可预测的。 但它总是导致权限拒绝导致
FileNotFoundException

我添加了使用权限,包括读和写,而不是在应用程序标签中。这没用。

我也有同样的问题,你找到解决办法了吗?@Sandra还没有。你?不,我没找到解决办法。最终,我使用了一个支持库来裁剪图像:。但我必须警告你们,当裁剪方向不同于0的图像时,这个库有一个bug,你们必须自己处理。可以在“问题”部分的讨论中找到解决方案。我不知道它是否会在库的下一个版本中实现,但我希望如此。除此之外,效果很好。谢谢你的提醒。
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    takePhoto = (Button) findViewById(R.id.take_photo);
    picture = (ImageView) findViewById(R.id.picture);
    takePhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //init File object, to save the image
            File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");
            try{
                if(outputImage.exists()){
                    outputImage.delete();
                }
                outputImage.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            imageUri = Uri.fromFile(outputImage);

            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
            startActivityForResult(intent, TAKE_PHOTO);
        }
    });
switch (requestCode){
        case TAKE_PHOTO:
            if(resultCode == RESULT_OK){
                Intent intent = new Intent("com.android.camera.action.CROP");
                intent.setDataAndType(imageUri, "image/*");
                intent.putExtra("scale", true);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(intent, CROP_PHOTO);
            }
            break;

        case CROP_PHOTO:
            Log.d("MainActivity", "CROP_PHOTO_IN, result code : " + resultCode);
            if(resultCode == RESULT_OK){
                Log.d("MainActivity", "CROP_PHOTO_OK");
                try {
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                    picture.setImageBitmap(bitmap);
                    Log.d("MainActivity", "PHOTO_SET");
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
            break;

        default:
            break;
    }