首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >针对特定文件扩展名的Android intent filter?

针对特定文件扩展名的Android intent filter?
EN

Stack Overflow用户
提问于 2009-11-14 11:55:26
回答 9查看 84.2K关注 0票数 102

我希望能够从网络上下载一个具有特定扩展名的文件,并将其传递给我的应用程序来处理它,但我还没能弄清楚意图过滤器。

代码语言:javascript
复制
<data android:path="*.ext" />

但我不能让它起作用。

EN

回答 9

Stack Overflow用户

发布于 2010-01-14 12:15:34

下面是我如何在我的AndroidManifest.xml中定义我的活动以使其正常工作。

代码语言:javascript
复制
<activity android:name="com.keepassdroid.PasswordActivity">
    <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="file" />
        <data android:mimeType="*/*" />
        <data android:pathPattern=".*\\.kdb" />
        <data android:host="*" />
    </intent-filter>
</activity>

filescheme指示这应该在打开本地文件时发生(而不是像HTTP这样的协议)。

可以将mimeType设置为*/*以匹配任何mime类型。

pathPattern中,您可以指定要匹配的扩展名(本例中为.kdb)。开头的.*匹配任何字符序列。这些字符串需要双重转义,因此\\\\.匹配文字句点。然后,以您的文件扩展名结束。关于pathPattern的一个警告是,.*不是一个贪婪的匹配,如果这是一个正则表达式,您会认为它是一个贪婪的匹配。此模式将无法匹配在.kdb之前包含.的路径。有关此问题的更详细讨论和解决方法,请参阅here

最后,根据Android文档,hostscheme属性都是pathPattern属性工作所必需的,所以只需将其设置为通配符就可以匹配任何内容。

现在,如果你在像Linda file Manager这样的应用程序中选择了一个.kdb文件,我的应用程序就会显示为一个选项。我应该注意的是,这本身并不允许您在浏览器中下载此文件类型,因为这只在文件方案中注册。在你的手机上安装一个像Linda File Manager这样的应用程序,通常会让你下载任何类型的文件。

票数 124
EN

Stack Overflow用户

发布于 2011-05-24 07:26:30

Brian上面的回答让我走了90%的路。为了完成它,对于我使用的mime类型

代码语言:javascript
复制
android:mimeType="*/*"

我怀疑之前的帖子试图发布相同的细节,但引用了星号斜杠作为代码,stackoverflow显示它只是一个斜杠。

票数 10
EN

Stack Overflow用户

发布于 2009-11-14 19:58:06

尝试使用android:mimeType,而不是android:path,它的值是这段特定内容的MIME类型。此外,android:path不接受通配符--为此使用android:pathPattern

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1733195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档