我的目标场景:用户在他/她首选的电子邮件应用中打开附件。我的应用程序建议打开/查看附件,用户选择我的应用程序,我的应用程序通过ContentResolver.openInputStream(uri)打开附件-uri,并从中读取。
这通常很有效。但我注意到,现在有几个电子邮件应用需要特殊权限,例如:com.fsck.k9.permission.READ_ATTACHMENT,com.android.email.permission.READ_ATTACHMENT,com.motorola.blur.service.email.Permissions .INTERACT等。
我认为为市场上的每个电子邮件应用添加一个uses-permission-tag是不好的设计。是否有更好的方法可以一般阅读附件?
此外 - 即使我决定在每个版本中继续向我的应用添加使用权限,我也会遇到另一个问题:如果需要该权限的应用在我的应用之后安装,我的应用没有权限,因为在我的应用程序安装时,包管理员不知道这样的权限甚至存在。
所以 - 如果他们决定切换到我的应用已经具有使用权限的新电子邮件应用,我是否真的必须指示我的用户重新安装我的应用?仅仅因为我的应用程序是第一个在他们的系统上?
非常感谢任何帮助。谢谢阅读!!
答案 0 :(得分:2)
我现在可以从我的应用中删除所有这些自定义权限,并且仍然可以阅读附件。
原来我做的一切正常,除了一件小事......
......我正在处理阅读两个活动中的附件。第一个Activity
- 我的主Activity
- 负责收集Intent
- 信息并选择/准备用于存储待导入数据的数据库。第二个Activity
实际上是从通过InputStream
获得的ContentResolver
读取并导入数据库。
事实证明FLAG_GRANT_READ_URI_PERMISSION
仅授予Intent
收件人的权限。当我将附件的Uri
传递给第二 Activity
时,它再也无法在那里阅读 - 仅通过向我的应用授予多个自定义Permissions
,如上所述我无法真正推荐的解决方案。
我现在的解决方案是阅读我的第一个Activity
中的所有数据,将其存储在一个临时文件中并将此文件Uri
传递给我的第二个Activity
。当然,现在我必须关心复制需要多长时间,可能会显示进度对话框并确定我可以在哪里找到足够的空间来访问原始文件 - Uri
似乎要容易得多。