我试图从设备库中获取图像,然后在另一个活动中显示它。 我的活动中的代码:
private void startGallery() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQ_OPEN_GALLERY)
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQ_OPEN_GALLERY && resultCode == Activity.RESULT_OK) {
Uri imageUri = data.getData()
// here I save image uri to pass to another activity
}
}
当我尝试在另一项活动中打开uri时,我得到SecurityException
。 Docs表示收到uri的许可有效,直到收到它们的活动结束。所以当我的活动结束时,我没有权限阅读文件。
是否有某种方法可以延长uri的许可,允许其他活动通过此uri打开文件?或者唯一的方法是将图像复制到本地应用程序存储?
UPD:我的目标是将收到的uri保存在本地数据库中,并允许其他活动和服务读取此文件。
答案 0 :(得分:11)
是否有某种方法可以延长uri的许可,允许其他活动通过此uri打开文件?
是。 Include FLAG_GRANT_READ_URI_PERMISSION
when you pass the Uri
从第一个活动到第二个活动:
startActivity(new Intent(this, Something.class).setData(uri).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION));