随着传递给startActivity
的意图FLAG_GRANT_READ_URI_PERMISSION
,如果使用 setData
设置了 uri,我们可以授予Uri
权限。但如果Uri
EXTRA_STREAM
,Uri
在嫉妒之前不会被授予。
我知道我们可以使用grantUriPermission
后跟一个revokeUriPermission
来取消授予的权限。但似乎没有好地方可以跑revokeUriPermission
.
有没有更好的解决方案?或者有什么建议放revokeUriPermission
?提前谢谢。
相关链接:如何使用FLAG_GRANT_READ_URI_PERMISSION授予对自定义内容提供程序的临时访问权限
我做了一些关于它的阅读。首先,EXTRA_STREAM不使用FLAG_GRANT_READ_URI_PERMISSION
。它从 JellyBean 开始工作只是因为在引擎盖下,调用startActivity()
副本EXTRA_STREAM
ClipData
,这是为 Intent 设置并使用FLAG_GRANT_READ_URI_PERMISSION
的
关于你的问题,应该在哪里调用 revokeUriPermission((。
我建议使用:
private static final int REQUEST_CODE = 1;
startActivityForResult(intent, REQUEST_CODE);
而不是
startActivity(intent);
然后重写以下方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == REQUEST_CODE) {
// Call revokeUriPermission here
}
}
当启动的活动退出时,将调用上述方法。在此处查看文档