仅针对文件的意图过滤器
Posted
技术标签:
【中文标题】仅针对文件的意图过滤器【英文标题】:Intent filter for files only 【发布时间】:2012-08-28 04:43:09 【问题描述】:在我们的应用中,我们希望出现在“分享方式”菜单中。所以我们将这个意图过滤器添加到我们的活动中:
<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>
它工作正常,我们的应用程序出现在共享菜单中。
尽管如此,intent 过滤器并没有完全达到我们想要的效果:
-
我们希望出现在所有文件的菜单中,无论 mime 类型是什么
我们只想为文件显示。到目前为止,如果用户想要分享一个简单的文本,因为它的 mime 类型将是 text/plain,我们的应用程序会出现在菜单中,我们不想要它。
正确的意图过滤器对于所有文件并且仅适用于文件是什么?
提前致谢。
我们尝试添加 scheme=file 和 host="" 或 "*",但它不起作用,因为许多应用使用 scheme=content 来共享基于文件的内容。
【问题讨论】:
很抱歉提出一个老问题,我尝试使用类别“android.intent.category.OPENABLE”并且似乎有效。它不显示从 chrome 共享网页,它显示从 Solid Explorer 共享文件。使用它是否安全或与方案一起使用更好? @Giorgio Aresu,不清楚你在问什么。您是否尝试了这两种选择? 我都试过了。使用答案中提到的方案,我什至在共享时都没有显示,将 openable 作为类别,它可以从文件管理器共享文件,但不能从浏览器共享纯文本。这就是我想要的:获取文件(所有 mime 类型),只有文件(不是文本),正是你想要的问题。进一步的测试表明,某些应用程序(photoshop express、gallery)以纯文本或“image:3710”等格式共享 uri,这些格式不适用于可打开的类别。我正在努力解决... 【参考方案1】:我们希望出现在所有文件的菜单中,无论 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
方案并不意味着它一定是一个文件。
【讨论】:
使用它,我们不会再出现在共享菜单中,也不会出现在我们安装的任何文件资源管理器中。 @Snicolas:好的,尝试两个<intent-filter>
元素,每个方案一个。
不,它没有使用 2 个意图过滤器,每个方案一个。
此解决方案是正确的,但可能与您的应用共享文件的 Intent 缺少方案信息。我认为您需要注意分享的内容。
所以没有办法过滤意图只处理文件?【参考方案2】:
-
如果您想为任何 MIME 类型调用,请不要在过滤器中放置单个地雷类型
scheme="file"
是仅在文件上运行的答案。现在,如果第 3 方应用程序将数据作为 content
传递,那么它(根据定义)不再是文件
【讨论】:
使用它,我们不会再出现在共享菜单中,也不会出现在我们安装的任何文件资源管理器中。以上是关于仅针对文件的意图过滤器的主要内容,如果未能解决你的问题,请参考以下文章
Spring security:在 3.1 中,仅针对“GET”请求绕过安全过滤器