如果FLAG_GRANT_READ_URI_PERMISSION
的意图传递给startActivity
,则如果使用Uri
设置了uri,我们可以授予setData
权限。但如果放入Uri
EXTRA_STREAM
,Uri
未在 jeallybean 之前授予。
我知道我们可以使用grantUriPermission
后跟revokeUriPermission
来取消授予的权限。但似乎没有好地方可以运行revokeUriPermission
。
有没有更好的解决方案?或者提出revokeUriPermission
的任何建议?提前谢谢。
相关链接:How to grant temporary access to custom content provider using FLAG_GRANT_READ_URI_PERMISSION
答案 0 :(得分:2)
我做了一些阅读。首先,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
}
}
当启动活动退出时,将调用上述方法。查看文档here