Android,Pick&使用单个startActivityForResult裁剪图像,但检索原始图像URI?

时间:2013-05-28 13:11:00

标签: android file android-intent crop

前段时间我设法使下面的代码工作(感谢像你这样的互联网上的人,绝对不是android文档......)。 它基本上做的是启动文件选择活动(在这种情况下是一个图像),然后直接跳转到图像裁剪活动,然后将裁剪的图像保存到提供的文件流。

    File file = new File(saveTo);
    FileOutputStream fs = new FileOutputStream(file);
    fs.close();

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    intent.setType("image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("outputX", maxImageSize);
    intent.putExtra("outputY", maxImageSize);
    intent.putExtra("scale", "true");
    //intent.putExtra("return-data", false);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("noFaceDetection", !false);
    intent.putExtra("setWallpaper", false);
    startActivityForResult(intent, CROP_FROM_CAMERA);

首先,我想明确表示这完全正常,我对此代码没有任何问题。

上述代码不会返回其意图中的任何数据。这是因为“返回数据”额外被按目的注释掉,因此裁剪后的图像直接保存到开放流中,而不是占用设备内存,并防止大图像出现丑陋行为。

我想知道的是: 如何获取已选择然后裁剪的ORIGINAL文件的URI 不是创建的文件\ thumbnail )? 有没有办法在不分离工作代码并尝试在几个步骤中执行此操作的情况下执行此操作? (如首先选择图像,然后运行裁剪活动,将原始文件URI存储在其中)

1 个答案:

答案 0 :(得分:1)

经过一些研究,我发现依靠这个意图是不好的做法,因为它可能会在未来版本的Android操作系统中删除或更改。 猜猜这就是为什么一开始就很难找到关于它的真实信息。 无论如何,我最终使用自定义裁剪库而不是依赖于内部的android意图。