意图仅过滤文件

时间:2012-09-03 12:32:27

标签: android share intentfilter

在我们的应用中,我们希望出现在“分享途径”菜单中。所以我们将这个intent-filter添加到我们的活动中:

<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,我们的应用程序会出现在菜单中,我们不想要它。
  3. 对于所有文件以及仅针对文件,正确的intent-filter是什么?

    提前致谢。


    我们尝试添加scheme = file和host =“”或“*”,并且它不起作用,因为很多app使用scheme = content来共享基于文件的内容。

2 个答案:

答案 0 :(得分:7)

  

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

尝试使用*/*的MIME类型。

  

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

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

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

但是,请记住,content计划并不意味着它必须是文件。

答案 1 :(得分:1)

  1. 如果您想为任何mime类型调用,请不要在过滤器中放置一个我的类型
  2. scheme="file"是仅对文件运行的答案。现在,如果第三方应用程序将数据作为content传递,那么(通过定义)不再是文件