我在一个活动中获得了图像的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
该如何解决?请尽可能详细地说明您的答案。
答案 0 :(得分:0)
我正在从Gallery获得这张图片
我将这解释为您使用的是Intent
或ACTION_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
)