首页 > 解决方案 > 用于自定义文件类型的 Android 意图过滤器

问题描述

问题

我有一个zip文件,但有一个自定义文件扩展名xyz。我希望我的应用程序能够仅打开具有自定义文件扩展名xyz的文件:

我已经尝试过的

我最好的办法是只使用一个 mime 类型的application/zip. 但是,这也会打开文件扩展名为.zip的文件。

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:mimeType="application/zip" />
</intent-filter>

我试图添加一个<data android:pathPattern=".*\\.xyz"/>. 但问题是,只要我不指定android:schemeandroid:host 在此处查看,它将被忽略。

仅当还为过滤器指定了方案和主机属性时,此属性才有意义。

一旦我指定了下一个代码段中看到的方案和主机,我什至无法用我的应用程序打开任何文件:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:host="*" />
    <data android:scheme="*" />
    <data android:mimeType="application/zip" />
    <data android:pathPattern=".*\\.xyz"/>
</intent-filter>

可能的重复:

标签: javaandroidintentfilter

解决方案


使用application/octet-stream而不是application/zip. 贝娄为我工作:

<intent-filter tools:ignore="AppLinkUrlError"
               android:icon="@mipmap/ic_launcher"
               android:label="@string/app_name"
               android:priority="50" >
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="file" />
  <data android:scheme="content" />
  <data android:mimeType="application/octet-stream" />
  <data android:pathPattern=".*\\.ext" />
  <data android:pathPattern=".*\\..*\\.ext" />
  <data android:pathPattern=".*\\..*\\..*\\.ext" />
</intent-filter>

推荐阅读