我最近将Android应用设置为可以接收Intent,因此可以将其用于打开电子邮件应用中的附件。
当创建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()
这篇网络文章表明问题是我的活动设置了android:launchMode="singleTask" ,解决问题的方法是创建一个中间活动来处理Intent。
该修复程序确实对我有用,但是我想了解为什么原始的Activity在创建以处理Intent时似乎具有从URI读取的权限,而在恢复处理Intent时却没有读取权限。
谁能为我解释一下?