男式,
我正在努力让我的Android应用程序可以响应正在打开的文件(通过匹配其扩展名)和mime类型(因此它们将在浏览器中运行)。
我遵循了这里的建议:
Android intent filter for a particular file extension?
但仍然没有运气。
我的android清单文件的相关部分如下:
<activity android:name="MuPDFActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.ms-xpsdocument"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/pdf"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/x-cbz"/>
</intent-filter>
<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:scheme="file"/>
<data android:mimeType="*/*"/>
<data android:pathPattern=".*\\.xps"/>
<data android:host="*"/>
</intent-filter>
<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:scheme="file"/>
<data android:mimeType="*/*"/>
<data android:pathPattern=".*\\.pdf"/>
<data android:host="*"/>
</intent-filter>
<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:scheme="file"/>
<data android:mimeType="*/*"/>
<data android:pathPattern=".*\\.cbz"/>
<data android:host="*"/>
</intent-filter>
</activity>
正如您所看到的,我希望为.pdf,.xps和.cbz文件调用该应用程序,以及具有相关mimetypes的文件。这里的局部测试似乎表明.pdf和application / pdf部分都在工作,但是尽可能地尝试.xps(并且可能是.cbz)部分不是。
我错过了一些明显的东西吗?每个Activity只能有一个mimetype / file模式吗?
非常感谢任何帮助。
谢谢,
罗宾
答案 0 :(得分:2)
afaik,那就更像了(一个带有各种值的过滤器):
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.ms-xpsdocument"/>
<data android:mimeType="application/pdf"/>
</intent-filter>
另外,mime类型可能不正确吗?
答案 1 :(得分:2)
多个<data>
是逻辑OR并单独处理。因此,您有一个标记为android:scheme
但没有android:pathPattern
,一个标记为android:pathPattern
但没有android:host
等等。所以<data>
标签都没有完整,并且会有任何好处。
您应该使用:
<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:scheme="file"
android:mimeType="*/*"
android:pathPattern=".*\\.cbz"
android:host="*"
></data>
</intent-filter>
您可以拥有第二个<data>
,但它会再次需要所有四个属性,因为如果您想使用android:pathPattern
,则Android 4必须使用所有四个属性。 (它们不适用于较旧的Android版本)
答案 2 :(得分:0)
每个Activity只能有一个mimetype / file模式吗?
没有。你自己承认,有两个人在工作(PDF x 2)。
我错过了一些明显的东西吗?
我怀疑BROWSABLE
元素会对你所拥有的元素有很大帮助,而你需要它。 BROWSABLE
适用于浏览器,它将沿着MIME类型路径发送。