android intent filter for custom file extension

2019-07-18 02:16发布

我试图做一个Android应用程序与扩展名为.abc打开的文件,这是Android清单XML我的应用程序部分

<application android:label="@string/app_name" android:icon="@drawable/icon">
    <activity android:name="com.example.app.ActName" android:label="AppName">
        <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="image/jpeg"/>
        </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=".*\\.abc" />
            <data android:host="*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>

我用所有的经验,从最流行和相关问题

对于特定的文件扩展名的Android意图过滤器?

Android的意图过滤器:关联的应用程序与文件扩展名

使用Android如何创建自定义的文件扩展名意图过滤器,不让它在手机上一切选择器的一部分

而在最后,这并不工作 - 当我在一个名为ES文件浏览器“name.abc”的文件,它要求我按一下,如果我想打开该文件为文本或图像等时,它实际上应该只需要打开文件在我的应用程序,而不是

我究竟做错了什么? 什么是正确的意图过滤器,只需点击在任何文件管理器相应的扩展名的文件,启动应用程序?

UPD。

它看起来像不同的Android系统和不同的文件浏览器以不同的方式行事 - 一个意图过滤器适用于4.2就好在“ES文件浏览器”,并在默认的文件管理器4.0.4,但不会在所有的4.2和4.0。在“总指挥官” 4对“ES文件浏览器” 4.0.4

Answer 1:

首先,第一个intent-filter在您的例子使用MIME类型image/jpeg 。 是jpeg.abc扩展?

我想可能有三个原因,这并不工作:

  1. 您需要添加更多的MIME类型。 尝试添加以下内容:

     <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/abc"/> </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:mimeType="application/octet-stream"/> </intent-filter> 

    而且,如果你的.abc格式为文本格式:

     <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="text/plain"/> </intent-filter> 
  2. 您已注册的file方案。 您可能还需要content方案:

     <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="content" /> <data android:mimeType="*/*" /> <data android:pathPattern=".*\\.abc" /> <data android:host="*" /> </intent-filter> 
  3. 谣言有它pathPattern以点仅匹配包含一个点的文件。 在你的榜样,这将意味着你的应用程序将与相关One.abc但与Two.Dots.abc 。 尝试增加pathPatterns .*\\..*\\.abc.*\\..*\\..*\\.abc等:

     <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=".*\\..*\\.abc" /> <data android:host="*" /> </intent-filter> 


文章来源: android intent filter for custom file extension