使用URI在另一个活动中获取位图

时间:2019-02-07 12:30:25

标签: android image android-intent kotlin uri

我在一个活动中获得了图像的URI,例如:ImageActivity,并将URI设置为名为Item的对象。

val item = Item()
item.imageURI = uri

现在,我得到了ImageActivity返回的结果,例如:UploadActivity

现在,我想从Item上传从ImageActivity获得的UploadActivity对象。我通过将图像的Bitmap编码为Base64来上传图像。因此,我需要图像的Bitmap

我是这样得到的:

val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, item.imageURI)
item.itemImage = imageToString(bitmap)

但是显示错误:

java.lang.SecurityException: Permission Denial: opening provider com.miui.gallery.provider.GalleryOpenProvider from ProcessRecord

该如何解决?请尽可能详细地说明您的答案。

1 个答案:

答案 0 :(得分:0)

  

我正在从Gallery获得这张图片

我将这解释为您使用的是IntentACTION_GET_CONTENT之类的ACTION_PICK

如果是这样,则默认情况下为the only place that Uri can be used is in the activity instance that receives it(在您的情况下为ImageActivity)。

您的选择包括:

  • 摆脱UploadActivity并做其他事情。例如,您可以由存储库执行实际的上载,而UI由ImageActivity处理(直接,通过片段等)。

  • 通过Uri的“数据”构面将UploadActivity传递到Intent,并在该FLAG_GRANT_READ_URI_PERMISSION上加上Intent

第二个选项类似于:

startActivity(Intent(this, OtherActivity::class.java).setData(yourUri).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION))

(其中yourUri是您的Uri