如何在Android活动中打开特定文件类型?
我想让一个活动成为打开.json文件类型的选项。例如,当我在浏览器中单击一个.json文件时,我希望在这个活动中打开它(或者有一个打开它的选项)。为了实现这一点,我尝试将pathPattern、scheme和主机添加到清单中的活动中。没有成功。浏览器显示“没有打开此文件的应用程序”。在StackOverflow上搜索后,我尝试添加mimeType。仍然没有成功。我尝试了20多个不同于现有StackOverflow问题的答案,但都没有成功。以下是我尝试过的一些答案:。 以下是我的活动:如何在Android活动中打开特定文件类型?,android,json,file,android-activity,android-manifest,Android,Json,File,Android Activity,Android Manifest,我想让一个活动成为打开.json文件类型的选项。例如,当我在浏览器中单击一个.json文件时,我希望在这个活动中打开它(或者有一个打开它的选项)。为了实现这一点,我尝试将pathPattern、scheme和主机添加到清单中的活动中。没有成功。浏览器显示“没有打开此文件的应用程序”。在StackOverflow上搜索后,我尝试添加mimeType。仍然没有成功。我尝试了20多个不同于现有StackOverflow问题的答案,但都没有成功。以下是我尝试过的一些答案:。 以下是我的活动: <a
<activity
android:name=".JsonActivity"
android:label="Json">
<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" />
<data android:scheme="https" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:host="*" />
<data android:pathPattern=".*\\.json" />
</intent-filter>
</activity>
我做错了什么?我确保添加了“写入外部存储”和“读取外部存储”权限,以及“可浏览类别”和“操作”视图。您需要多个意图过滤器来处理不同的情况。
You need multiple intent filters to address different situation you want to handle.
Example 1, handle http requests without mimetypes:
<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=".*\\.json" />
</intent-filter>
Handle with mimetypes, where the suffix is irrelevant:
<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/json" />
</intent-filter>
Handle intent from a file browser app:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />`enter code here`
<data android:host="*" />
<data android:pathPattern=".*\\.json" />
</intent-filter>
示例1,处理不带mimetype的http请求:
处理与后缀无关的mimetypes:
处理来自文件浏览器应用程序的意图:
`在这里输入代码`
您需要多个意图过滤器来处理不同的情况。
示例1,处理不带mimetype的http请求:
处理与后缀无关的mimetypes:
处理来自文件浏览器应用程序的意图:
`在这里输入代码`
不要将所有内容都塞进一个
,尤其是在规则不兼容的情况下。您的活动可以有零个、一个或多个
元素。在您的情况下,content
并不总是有文件扩展名,而且http
和https
也不能保证有文件扩展名。对于这些,您需要使用mimeType
,而不是host
和pathPattern
。感谢您的回答,它工作起来很有魅力!我不知道mimeType是什么样的文件呢?我希望能够在Activity中打开.geojson文件,但我无法确定.geojson文件的mime类型。我如何才能做到这一点?“关于我不知道mimeType是什么的文件呢?”——在Android中,通过
将此类内容推送到应用程序中的选项并不多。对于GeoJSON,您可以尝试application/geo+json
,但我不知道有多少应用程序会知道这种MIME类型。我尝试了application/geo+json
、application/json
和application/GeoJSON
,但遗憾的是,它们都不起作用。在“我的活动”中打开.geojson文件,而不是使用意图过滤器,是否有解决方法?您可以使用操作\u open\u DOCUMENT
请求文档,并再次指定MIME类型。我不知道文档UI是否会识别应用程序/geo+json
,这意味着您可能会被*/*
困扰,需要验证用户是否确实选择了GeoJSON文件。不要将所有内容都放在一个
中,尤其是在规则不兼容的情况下。您的活动可以有零个、一个或多个
元素。在您的情况下,content
并不总是有文件扩展名,而且http
和https
也不能保证有文件扩展名。对于这些,您需要使用mimeType
,而不是host
和pathPattern
。感谢您的回答,它工作起来很有魅力!我不知道mimeType是什么样的文件呢?我希望能够在Activity中打开.geojson文件,但我无法确定.geojson文件的mime类型。我如何才能做到这一点?“关于我不知道mimeType是什么的文件呢?”——在Android中,通过
将此类内容推送到应用程序中的选项并不多。对于GeoJSON,您可以尝试application/geo+json
,但我不知道有多少应用程序会知道这种MIME类型。我尝试了application/geo+json
、application/json
和application/GeoJSON
,但遗憾的是,它们都不起作用。在“我的活动”中打开.geojson文件,而不是使用意图过滤器,是否有解决方法?您可以使用操作\u open\u DOCUMENT
请求文档,并再次指定MIME类型。我不知道文档UI是否会识别应用程序/geo+json
,这意味着您可能会被*/*
困扰,需要验证用户是否确实选择了GeoJSON文件。