如何在Android活动中打开特定文件类型?

如何在Android活动中打开特定文件类型?,android,json,file,android-activity,android-manifest,Android,Json,File,Android Activity,Android Manifest,我想让一个活动成为打开.json文件类型的选项。例如,当我在浏览器中单击一个.json文件时,我希望在这个活动中打开它(或者有一个打开它的选项)。为了实现这一点,我尝试将pathPattern、scheme和主机添加到清单中的活动中。没有成功。浏览器显示“没有打开此文件的应用程序”。在StackOverflow上搜索后,我尝试添加mimeType。仍然没有成功。我尝试了20多个不同于现有StackOverflow问题的答案,但都没有成功。以下是我尝试过的一些答案:。 以下是我的活动: <a

我想让一个活动成为打开.json文件类型的选项。例如,当我在浏览器中单击一个.json文件时,我希望在这个活动中打开它(或者有一个打开它的选项)。为了实现这一点,我尝试将pathPattern、scheme和主机添加到清单中的活动中。没有成功。浏览器显示“没有打开此文件的应用程序”。在StackOverflow上搜索后,我尝试添加mimeType。仍然没有成功。我尝试了20多个不同于现有StackOverflow问题的答案,但都没有成功。以下是我尝试过的一些答案:。 以下是我的活动:

<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文件。