【问题标题】:Grant uri permission to uri in EXTRA_STREAM in intent在意图中授予 uri 对 EXTRA_STREAM 中 uri 的权限
【发布时间】:2013-07-18 23:43:55
【问题描述】:

使用FLAG_GRANT_READ_URI_PERMISSION 传递给startActivity 的意图,如果使用setData 设置uri,我们可以授予Uri 权限。但是如果将Uri 放入EXTRA_STREAM 中,则Urijeallybean 之前不会被授予。

我知道我们可以使用grantUriPermission 后跟revokeUriPermission 取消授予的权限。不过好像没有好地方跑revokeUriPermission

有没有更好的解决方案?或者有什么建议可以输入revokeUriPermission?提前致谢。

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

【问题讨论】:

  • 你找到这个问题的答案了吗?我在尝试向 EXTRA_STREAM 中的数据授予读取 uri 权限时遇到同样的问题
  • 如果我错了,请纠正我。您正在尝试将 Uri(私有文件系统中的指向文件)传递给安装在设备上的另一个应用程序。通过您的 ContentProvider 访问 Uri。
  • 请发布您的清单和您创建 Intent 并开始活动的代码部分。

标签: android android-contentprovider android-permissions


【解决方案1】:

我做了一些关于它的阅读。首先,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

【讨论】:

  • 我的要求是使用将导出标志设置为 false 的内容提供商向电子邮件应用程序提供附件。通过电子邮件意图开始的第一个活动是选择器活动,对于 startActivityForResult 不会返回电子邮件活动的完成,而是会给我选择器活动的完成。因此,如果此时权限被撤销,那么电子邮件应用程序将无法读取附件。
  • 你是否明确地调用了ChooserActivity?如果是,那么也许尝试没有它。如果您想确保只显示电子邮件应用程序,请调用此 intent.setData(Uri.parse("mailto:"));。如果不是,那么您的提供商的 可能就足够了。它允许指定可以通过 ContentProvider 访问的文件(使用正则表达式)。如果仍然不好提出单独的问题,请粘贴您的代码并告诉我。我会想办法的。竖起大拇指!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
相关资源
最近更新 更多