Android 文件/内容意图筛选器不适用于BroadcastReceiver,仅适用于活动

Android 文件/内容意图筛选器不适用于BroadcastReceiver,仅适用于活动,android,android-intent,intentfilter,android-file,Android,Android Intent,Intentfilter,Android File,对于我的应用程序,我希望能够从电子邮件附件或文件浏览器中打开文件,并在后台对其进行处理——也许可以通过祝酒辞提供成功/失败反馈。我有以下意图过滤器设置: <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/

对于我的应用程序,我希望能够从电子邮件附件或文件浏览器中打开文件,并在后台对其进行处理——也许可以通过祝酒辞提供成功/失败反馈。我有以下意图过滤器设置:

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>

            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>

            <data android:mimeType="application/octet-stream"/>
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <action android:name="android.intent.action.EDIT"/>

            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>

            <data
                android:mimeType="*/*"
                android:host="*"
                android:pathPattern=".*\\.mpb"
                android:scheme="file"/>
        </intent-filter>

然而,如果我将这些过滤器放在广播接收器下,Android似乎拒绝承认这些过滤器的存在。如果我在活动下放置完全相同的过滤器,它会正常工作。这是Android意图过滤器的限制吗


现在,我只是简单地使用活动将意图传递给IntentService,在IntentService中我处理该文件-这与我的BroadcastReceiver所做的几乎相同-然后调用
finish()
return。这可以完成任务,但用户体验不好,因为活动会立即出现并消失。我宁愿让广播接收器工作,那么我有什么遗漏吗?

我有什么遗漏吗?-是的,恐怕有

您接收广播时未使用与activity do catch相同的目的过滤器的原因很简单:

触发此事件的应用程序(您示例中的gmail应用程序)正在启动,而不是发送广播。

什么意思是如果没有发送广播-那么您可以忘记通过
BroadcastReceiver

不要在这方面做任何工作,而要启动自己的活动

启动隐式活动而不是使用
ACTION\u视图
发送广播是有意义的,因为毕竟-
ACTION\u视图
都是为了显示一些东西,所以当用户点击文件时,某些事情只会在后台发生,这是没有意义的

你是对的,在这种情况下,启动和完成活动是一种糟糕的用户体验,但不显示任何可见内容更糟糕-用户将继续单击,因为他认为什么都没有发生


我将代替你做什么-展示特殊的有意义的活动,将你正在做的任何处理可视化,而不是只在后台进行,当流程完成时-也完成活动。

谢谢-这是对我实际上错过的有意义细节的一个很好的解释。非常感谢。@sigmabeta:很高兴它帮助了你:->