Android Intent Filters - 专有文件类型的空白 mimeType

问题描述 投票:0回答:1

我使用意图过滤器将我的应用程序与我的专有文件类型相关联,以便用户可以点击该文件并在我的应用程序中打开它。直到最近我一直在使用基于文件名的:

<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="*/*" />
<data android:scheme="file" />
<data android:scheme="content" />
<data android:host="*" />
<data android:pathPattern=".*\\.rhr" />

(加上路径模式的其他变体以允许文件夹)

似乎从 Android 7 开始,应用程序无法共享文件 URL 官方文档。没问题,我们可以只使用 Mime 类型:

<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:scheme="content" />
<data android:mimeType="[???]" />

除了某些应用程序不发送 mime 类型。例如,三星“我的文件”应用程序发送一个空字符串作为 mime 类型。

我可以使用“*/*”,但这肯定会惹恼人们。还有其他选择吗?

android android-intent android-manifest
1个回答
0
投票

可悲的答案是,除了使用

*/*
并且不进行文件扩展名过滤之外,没有什么好的解决方案。

当三星的文件管理器尝试打开其无法识别的 mime 类型的文件时,它们默认传递

""
(空字符串),这是不可能进行过滤的 - 在意图过滤器中设置空 mime 类型会创建格式错误的文件您的设备将拒绝安装 APK,因此捕获它的唯一方法是使用
*/*

他们可能应该默认为

application/octet-stream
,但这不会很快发生 - 除非你为三星工作,在这种情况下,去改变它:)

如果您只包含以自定义扩展名 (

*/*

) 结尾的文件,
*.rhr
可能是可以容忍的 - 但是,这也是不可能的,因为自从迁移到
content://
URI 以来,文件名对接收者来说是隐藏的应用程序(URI 路径通常只是一个不透明的整数)。

© www.soinside.com 2019 - 2024. All rights reserved.