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:很高兴它帮助了你:->