【问题标题】:android intent filter for custom file extension用于自定义文件扩展名的android意图过滤器
【发布时间】:2013-01-10 11:09:26
【问题描述】:

我正在尝试制作一个 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”的文件时,它会询问我是否要以文本或图像等形式打开文件,而实际上应该只是改为在我的应用中打开文件

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

更新。

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

【问题讨论】:

  • 使用相同的代码,我可以选择长按“name.abc”文件是文本、音频、视频、图像。
  • @PratikSharma ,我认为这不是它应该工作的方式。我改变了问题来描述它。

标签: android android-intent


【解决方案1】:

首先,您示例中的第一个intent-filter 使用MIME 类型image/jpegjpeg 是您的 .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. Rumor 表示带有点的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>
    

【讨论】:

猜你喜欢
  • 2015-09-11
  • 2010-12-16
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多