在Android 4.4中从图库选择时进行裁剪

5
自从Android 4.4版以后,当您启动Intent.ACTION_GET_CONTENT类型的意图时,不再需要在Gallery、Dropbox等之间进行选择,而是打开新的文档浏览器。如果您只想打开一个图像,那么这是可以的,因为可以像旧版本的API一样执行此操作。但是,当您需要裁剪所选的图像时,问题就出现了,因为文档浏览器忽略了我传递给它的Uri和裁剪参数。这是我正在做的事情:
void take_photo() {
    File file = null;
    try {
        file = PhotoUtils.createTemporaryFile("picture", ".jpg",
                EditProfileActivity.this);
        file.delete();

    } catch (Exception e) {
        e.printStackTrace();
    }
    photoUri = Uri.fromFile(file);
    Intent galleryIntent= new Intent(Intent.ACTION_GET_CONTENT);
    galleryIntent.setType("image/*");
    galleryIntent.putExtra("crop", "true");
    galleryIntent.putExtra("aspectX", 2);
    galleryIntent.putExtra("aspectY", 2);
    galleryIntent.putExtra("outputX", 1300);
    galleryIntent.putExtra("outputY", 1300);
    galleryIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
    startActivityForResult(galleryIntent, ACTIVITY_SELECT_IMAGE);
}

然后我保存了我的photoUri,以确保在返回时可用:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (photoUri != null)
        outState.putString("uri", photoUri.toString());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState.containsKey("uri"))
        photoUri = Uri.parse(savedInstanceState.getString("uri"));
}

接着在onActivityResult中,我只需要通过photoUri打开一个InputStream,因为galleryIntent已经创建了所裁剪图像的文件。

现在,当我这样做时,意图中指定的photoUri文件永远不会被创建。是否有一种新的方法来实现这个功能?

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
4
您可能希望使用返回的意图数据Uri。
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

  if (requestCode == ACTIVITY_SELECT_IMAGE) {

     if(resultCode == RESULT_OK){      
         Uri realUri = intent.getData();   
     }
  }
}

现在,由于DocumentsActivity不知道如何“裁剪”任何内容。您可以将操作更改为:Intent.ACTION_PICK

这将使您绕过DocumentsActivity直接进入相册或照片应用程序。

我建议您使用两个Intents。一个意图选择照片,然后一个意图裁剪该照片。这更可靠,因为某些应用程序(例如Photos应用程序)也不知道如何处理“裁剪”额外功能。


这就是我在Kitkat中正在做的事情,但无论如何都不允许裁剪参数。 - Makerhack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,