intent-filter如何从Android 2更改为Android 4?

时间:2013-12-18 05:34:10

标签: android android-intent android-manifest

我的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的文件时,应启动应用程序并打开文件。此外,文件管理器应使用提供的图标来显示文件。

1 个答案:

答案 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 }属性已设置。好吧,如果是这样的话,你不能双管齐下,并且会与未来同在。