【问题标题】:Why does launchMode:singleTask cause SecurityExceptions when opening Intents?为什么打开 Intents 时 launchMode:singleTask 会导致 SecurityExceptions?
【发布时间】:2014-02-27 11:23:26
【问题描述】:

我最近将我的 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()

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

该修复确实对我有用,但我想了解为什么我的原始 Activity 在 创建 以处理 Intent 时似乎有权从 URI 读取,但没有何时恢复处理 Intent。

谁能帮我解释一下?

【问题讨论】:

    标签: android android-intent securityexception


    【解决方案1】:

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

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

    参考这个Manifest Permissions

    【讨论】:

    • 感谢您的建议,但它没有回答我的问题。当我的 Activity 尚未运行时,为什么它没有该权限也能正常工作?
    • 因为仅当您尝试从 URI 读取内容时才需要此权限。因此,当您尝试从 URI 读取内容时,您会得到 SecurityExceptions。
    • 添加权限后检查了吗?
    • 再一次,只要在我尝试打开电子邮件中的附件之前我的应用程序没有运行,我就可以成功地从 URI 读取内容。我想知道为什么会这样,但是如果我的应用在后台暂停,它就不起作用了。
    猜你喜欢
    • 2013-04-27
    • 2013-03-21
    • 2022-07-06
    • 2019-10-12
    • 2013-05-22
    • 2015-05-13
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多