Android 为什么launchMode:singleTask在打开意图时会导致安全异常?

Android 为什么launchMode:singleTask在打开意图时会导致安全异常?,android,android-intent,securityexception,Android,Android Intent,Securityexception,我最近将我的Android应用程序设置为接收意向,这样它就可以用来打开电子邮件应用程序的附件 当创建意图时,我的应用程序尚未运行,但当我的应用程序在后台暂停时,尝试从URI读取内容会引发SecurityExceptions时,此操作正常: E/AndroidRuntime(28250): java.lang.RuntimeException: Unable to resume activity {com.[...]/com.[...].Main}: java.lang.SecurityExcep

我最近将我的Android应用程序设置为接收意向,这样它就可以用来打开电子邮件应用程序的附件

当创建意图时,我的应用程序尚未运行,但当我的应用程序在后台暂停时,尝试从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()
表明问题在于我的活动设置了
android:launchMode=“singleTask”
set,解决问题的方法是创建一个中间活动来处理意图

该修复确实对我有效,但我想理解为什么我的原始活动在创建时有权读取URI以处理意图,而在恢复时却没有权限读取URI以处理意图


有人能给我解释一下吗?

你需要在
清单
中添加
READ\u GMAIL
权限

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


参考此

谢谢你的建议,但它没有回答我的问题。为什么当我的活动尚未运行时,没有该权限它可以正常工作?因为只有当您尝试从URI读取内容时,才需要该权限。因此,当您尝试从URI中读取内容时,会出现
SecurityExceptions
。添加权限后是否进行检查?同样,我可以在不添加权限的情况下从URI中成功读取内容,只要在我尝试从电子邮件中打开附件之前我的应用程序未运行。我想知道为什么会这样,但如果我的应用程序在后台暂停,它就不起作用了。