授予uri在EXTRA_STREAM中的意图权限

时间:2013-07-19 15:48:49

标签: android android-contentprovider android-permissions

如果FLAG_GRANT_READ_URI_PERMISSION的意图传递给startActivity,则如果使用Uri设置了uri,我们可以授予setData权限。但如果放入Uri EXTRA_STREAMUri未在 jeallybean 之前授予。

我知道我们可以使用grantUriPermission后跟revokeUriPermission来取消授予的权限。但似乎没有好地方可以运行revokeUriPermission

有没有更好的解决方案?或者提出revokeUriPermission的任何建议?提前谢谢。

相关链接:How to grant temporary access to custom content provider using FLAG_GRANT_READ_URI_PERMISSION

1 个答案:

答案 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