我的AndroidManifest.xml中有以下intent-filter,它在Android 2.x.x中运行良好,在Android 4.x.x中没有做任何事情:
<intent-filter
android:icon="@drawable/ic_fx_603p_pf"
android:label="FX-603P Program File"
android:priority="1"
>
<category
android:name="android.intent.category.DEFAULT"
></category>
<action
android:name="android.intent.action.VIEW"
></action>
<data
android:host="*"
android:pathPattern=".*\\.pf"
android:scheme="file"
></data>
</intent-filter>
问题是:有什么变化,如何让意图再次发挥作用?
预期的行为:在文件管理器(如Astro)中选择扩展名为*.pf
的文件时,应启动应用程序并打开文件。此外,文件管理器应使用提供的图标来显示文件。
答案 0 :(得分:0)
经过一些实验,我发现android:mimeType
不是强制性的。因此解决方案是:
<intent-filter
android:icon="@drawable/ic_fx_602p_pf"
android:label="FX-602P Program File"
android:priority="1"
>
<category
android:name="android.intent.category.DEFAULT"
></category>
<action
android:name="android.intent.action.VIEW"
></action>
<data
android:host=""
android:mimeType="*/*"
android:pathPattern=".*\\.pf"
android:scheme="file"
></data>
<data
android:host="*"
android:mimeType="application/x-fx-602p.program"
></data>
</intent-filter>
稍微多一点,我发现<intent-filter>
可以有两个以上<data>
个标签。如果匹配,则调用intent(逻辑OR)
在标记内,所有属性必须匹配(逻辑AND)。
但是这个解决方案存在问题:Android 2.x中似乎存在一个错误,<data>
的属性没有严格对待逻辑,导致所有文件在{{1 }属性已设置。好吧,如果是这样的话,你不能双管齐下,并且会与未来同在。