为什么launchMode:singleTask在打开Intent时会导致SecurityExceptions?

时间:2014-02-27 11:23:27

标签: android android-intent securityexception

我最近设置了我的Android应用程序以接收Intents,因此它可用于打开电子邮件应用程序中的附件。

当我的应用程序在创建Intent时尚未运行时可以正常工作,但是当我的应用程序在后台暂停时,尝试从URI中读取内容会导致抛出SecurityExceptions:

E/AndroidRuntime(28250): java.lang.RuntimeException: Unable to resume activity
{com.[...]/com.[...].Main}: java.lang.SecurityException: Permission Denial:
reading com.google.android.gm.provider.MailProvider uri content://gmail-ls/
notateme@gmail.com/messages/134/attachments/0.1/BEST/false from pid=28250,
uid=10205 requires com.google.android.gm.permission.READ_GMAIL, or
grantUriPermission()

E/AndroidRuntime(28250): Caused by: java.lang.SecurityException: Permission
Denial: reading com.google.android.gm.provider.MailProvider uri content://
gmail-ls/notateme@gmail.com/messages/134/attachments/0.1/BEST/false from
pid=28250, uid=10205 requires com.google.android.gm.permission.READ_GMAIL,
or grantUriPermission()

This web post表明问题在于我的活动设置了android:launchMode="singleTask",解决问题的方法是创建一个中间活动来处理意图。

该修复确实对我有用,但我想了解为什么我的原始Activity似乎有权在创建来处理Intent时读取URI,但不是当恢复来处理意图时。

有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:1)

您需要在READ_GMAIL中添加manifest权限。

<uses-permission android:name="com.google.android.gm.permission.READ_GMAIL" />

请参阅此Manifest Permissions