正确的 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 关联?的主要内容,如果未能解决你的问题,请参考以下文章
Gradle:如何为需要相同 Activity 但具有不同意图过滤器的不同 buildType 合并 Android 清单文件