仅针对文件的意图过滤器

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 来共享基于文件的内容。

然后有两个&lt;data&gt; 元素,一个用于content 的方案,一个用于file 的方案。

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

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

【讨论】:

使用它,我们不会再出现在共享菜单中,也不会出现在我们安装的任何文件资源管理器中。 @Snicolas:好的,尝试两个&lt;intent-filter&gt; 元素,每个方案一个。 不,它没有使用 2 个意图过滤器,每个方案一个。 此解决方案是正确的,但可能与您的应用共享文件的 Intent 缺少方案信息。我认为您需要注意分享的内容。 所以没有办法过滤意图只处理文件?【参考方案2】:
    如果您想为任何 MIME 类型调用,请不要在过滤器中放置单个地雷类型 scheme="file" 是仅在文件上运行的答案。现在,如果第 3 方应用程序将数据作为 content 传递,那么它(根据定义)不再是文件

【讨论】:

使用它,我们不会再出现在共享菜单中,也不会出现在我们安装的任何文件资源管理器中。

以上是关于仅针对文件的意图过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Spring security:在 3.1 中,仅针对“GET”请求绕过安全过滤器

如何仅针对 json 关闭 railsprotect_from_forgery 过滤器

使用自定义意图操作仅在特定应用程序上下文中启动活动

Oculus Go 文件关联与意图过滤器

特定文件扩展名的Android意图过滤器?

利用URLScan工具过滤URL中的特殊字符(仅针对IIS6)-- 解决IIS短文件名漏洞