正确的 Android 意图过滤器配置以将文件类型与 Activity 关联?

Posted

技术标签:

【中文标题】正确的 Android 意图过滤器配置以将文件类型与 Activity 关联?【英文标题】:Correct Android intent-filter configuration to associate a file type with an Activity? 【发布时间】:2011-05-08 03:14:31 【问题描述】:

这个问题之前已经 [无数次] 被问过,但我没有看到任何明确的答案或实际有效的代码示例。

我想将 Activity 与特定文件类型相关联。

为了讨论,假设我希望我的 Activity 与 PDF 相关联。

这是我目前拥有的。我已经在意图过滤器中尝试了许多不同的值和值组合,但我还没有让我的 Activity 在选择 PDF 时启动。

活动>

有谁知道如何真正做到这一点?

【问题讨论】:

【参考方案1】:

你试过那个简单的版本吗:

<activity name="com.mycompany.MyActivity">
    <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/pdf" />
    </intent-filter>
</activity>

【讨论】:

【参考方案2】:

您的 pathPattern 肯定是错误的,并且您对 mimetype 的限制太多。

尝试以下方法:

<activity name="com.mycompany.MyActivity">
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.pdf" />
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
    <data android:host="*" />
    <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:scheme="file" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.pdf" />
  </intent-filter>
</activity>

【讨论】:

我认为host="*" 可以省略,但它开始太宽泛了。【参考方案3】:

要打开本地和远程 pdf 文件,我会这样做:

           <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:scheme="file" android:host="*" android:pathPattern=".*\\.pdf" />
        </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="http" android:host="*" android:pathPattern=".*\\.pdf" />
            <data android:scheme="https" android:host="*" android:pathPattern=".*\\.pdf" />
        </intent-filter>

【讨论】:

以上是关于正确的 Android 意图过滤器配置以将文件类型与 Activity 关联?的主要内容,如果未能解决你的问题,请参考以下文章

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

简述 IntentFilter(意图过滤器)

URL 栏未隐藏

如何从意图过滤器接收 pdf 文件 - Android

仅针对文件的意图过滤器

Gradle:如何为需要相同 Activity 但具有不同意图过滤器的不同 buildType 合并 Android 清单文件