自定义文件扩展名的android intent过滤器

时间:2013-01-10 11:09:26

标签: android android-intent

我正在尝试制作一个Android应用程序来打开扩展名为.abc的文件,这是我的应用程序部分来自android manifest 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 intent filter for a particular file extension?

Android intent filter: associate app with file extension

Android How to create Intent Filter for custom file extension that does NOT make it part of a chooser for everything on the phone

最后这不起作用 - 当我在ES文件浏览器中点击一个名为“name.abc”的文件时,它询问我是否要将文件作为文本或图像等打开,当它实际上应该只是在我的应用程序中打开文件

我做错了什么?通过在任何文件管理器中单击具有相应扩展名的文件来启动应用程序的正确意图过滤器是什么?

UPD。

看起来不同的Android系统和不同的文件浏览器以不同的方式运行 - 一个意图过滤器在“ES文件资源管理器”中的4.2和默认文件管理器中的4.0.4上工作正常,但在4.2上完全不起作用“Total Commander”中的4.0.4和“ES文件资源管理器”中的4.0.4

1 个答案:

答案 0 :(得分:2)

首先,示例中的第一个intent-filter使用MIME类型image/jpegjpeg您的.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="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> 吗?

我认为为什么这不起作用可能有三个原因:

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

    .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> 格式是文本格式:

    file
  2. 您已注册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> 方案:

    pathPattern
  3. Rumor认为带有点的One.abc只匹配包含单个点的文件。在您的示例中,这意味着您的应用会与Two.Dots.abc相关联,但不会与.*\\..*\\.abc相关联。尝试添加更多pathPatterns .*\\..*\\..*\\.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> 等:

    {{1}}
相关问题