13

在我们的应用程序中,我们希望出现在“分享方式”菜单中。所以我们将这个意图过滤器添加到我们的活动中:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>

它工作正常,我们的应用程序出现在共享菜单中。

然而,意图过滤器并没有完全达到我们想要达到的效果:

  1. 我们希望出现在所有文件的菜单中,无论 mime 类型是什么
  2. 我们只想出现在文件中。到目前为止,如果用户想要分享一个简单的文本,因为它的 mime 类型将是 text/plain,我们的应用程序会出现在菜单中,我们不想要它。

对于所有文件且仅适用于文件的正确意图过滤器是什么?

提前致谢。


我们尝试添加 scheme=file 和 host="" 或 "*",但它不起作用,因为许多应用程序使用 scheme=content 来共享基于文件的内容。

4

2 回答 2

7

我们希望出现在所有文件的菜单中,无论 mime 类型是什么

尝试 MIME 类型的*/*.

我们只想出现在文件中。到目前为止,如果用户想要分享一个简单的文本,因为它的 mime 类型将是 text/plain,我们的应用程序会出现在菜单中,我们不想要它。我们尝试添加 scheme=file 和 host="" 或 "*",但它不起作用,因为许多应用程序使用 scheme=content 来共享基于文件的内容。

然后有两个<data>元素,一个用于 的方案,content一个用于 的方案file

<data android:mimeType="*/*" />
<data android:scheme="content" />
<data android:scheme="file" />

但是,请记住,content方案并不意味着它一定是文件。

于 2012-09-03T12:39:38.320 回答
1
  1. 如果您想为任何 MIME 类型调用,请不要在过滤器中放置单个地雷类型
  2. scheme="file"是仅在文件上运行的答案。现在,如果第 3 方应用程序将数据传递为content,那么它(根据定义)不再是文件
于 2012-09-03T12:41:32.497 回答