1

我的目标场景:用户在他/她喜欢的电子邮件应用中打开一个附件。建议我的应用打开/查看附件,用户选择我的应用,我的应用通过 ContentResolver.openInputStream(uri) 打开附件 uri 并从中读取。

这通常效果很好。不过,我注意到了一些电子邮件应用程序现在需要特殊权限,例如:com.fsck.k9.permission.READ_ATTACHMENT、com.android.email.permission.READ_ATTACHMENT、com.motorola.blur.service.email.Permissions .INTERACT等

我认为为市场上的每个电子邮件应用程序添加使用许可标签是不好的设计。有没有更好的方法可以普遍阅读附件?

此外 - 即使我决定在每次发布时继续向我的应用程序添加使用权限,我也会遇到另一个问题:如果需要权限的应用程序是在我的应用程序之后安装的,我的应用程序将没有权限,因为当时在我的应用程序安装中,packagemanager 不知道甚至存在这样的权限。

那么 - 如果我的用户决定切换到我的应用程序已经拥有使用权限的新电子邮件应用程序,我真的必须指示我的用户重新安装我的应用程序吗?仅仅因为我的应用程序首先出现在他们的系统上??

任何帮助将不胜感激。谢谢阅读!!

4

1 回答 1

2

我现在可以从我的应用程序中删除所有这些自定义权限,并且仍然可以读取附件。

事实证明我做的一切都是对的,除了一件小事......

...我在两个活动中处理阅读附件。第一个Activity- 我的主要Activity- 负责收集Intent信息并选择/准备用于存储要导入的数据的数据库。第二个Activity实际上是从InputStream获得的 via中读取ContentResolver并导入到数据库中。

事实证明,FLAG_GRANT_READ_URI_PERMISSION它只授予Intent. 当我将Uri附件传递到第二个 Activity时,它无法再在那里阅读 - 只能通过授予我的应用程序几个 custom Permissions,如上所述我不能真正推荐的解决方案。

我现在的解决方案是读取我的第一个中的所有数据Activity,将其存储在一个临时文件中并将这个文件传递Uri给我的第二个Activity。当然,现在我必须关心复制需要多长时间,可能会显示进度对话框并确定我可以在哪里找到足够的空间来存放临时文件,访问原件Uri似乎要容易得多。

于 2012-11-12T06:24:54.457 回答