从Bundle获取URI

时间:2017-08-08 11:39:46

标签: android

如何从Bundle获取URI?我试过下面的代码,但是data.getExtras();将给出错误,data.getData()将给出null。

Intent intent = new Intent(Intent.ACTION_PICK,

                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            intent.setType("image/*");

            intent.putExtra("scale", true);
            intent.putExtra("crop", "true");
            intent.putExtra("outputX", 256);
            intent.putExtra("outputY", 256);
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            intent.putExtra("return-data", true);
            startActivityForResult(intent, 1);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {

 final Uri imageUri = data.getExtras();
final Uri imageUri = data.getData();
}
}

2 个答案:

答案 0 :(得分:4)

  

如何从Bundle获取URI?

你通常不会。

  

但是data.getExtras();会给出错误

这是因为getExtras()会返回Bundle,而不是Uri

  

和data.getData()将给出null

用户没有选择任何内容,或者用户为此请求选择的ACTION_PICK活动中存在错误。

此外,请注意,您放在ACTION_PICK上的那些额外内容没有记录,不受支持,并且在许多设备上都不会受到尊重。有很多image cropping libraries available for Android。请使用一个。

此外,ACTION_PICK不使用MIME类型。 ACTION_PICK说"从这个内容集中挑选一段内容"。如果您想按MIME类型限制内容,请使用ACTION_GET_CONTENTUri中没有Intent)或ACTION_OPEN_DOCUMENT来说明"给我一段内容匹配此MIME类型"。

答案 1 :(得分:0)

您忘记了intent.setAction(Intent.ACTION_GET_CONTENT);

如果您不添加data.getData()将为空