我希望能够从网络上下载一个具有特定扩展名的文件,并将其传递给我的应用程序来处理它,但我还没能弄清楚意图过滤器。
<data android:path="*.ext" />
但我不能让它起作用。
发布于 2010-01-14 12:15:34
下面是我如何在我的AndroidManifest.xml中定义我的活动以使其正常工作。
<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>
file
的scheme
指示这应该在打开本地文件时发生(而不是像HTTP这样的协议)。
可以将mimeType
设置为*/*
以匹配任何mime类型。
在pathPattern
中,您可以指定要匹配的扩展名(本例中为.kdb
)。开头的.*
匹配任何字符序列。这些字符串需要双重转义,因此\\\\.
匹配文字句点。然后,以您的文件扩展名结束。关于pathPattern的一个警告是,.*
不是一个贪婪的匹配,如果这是一个正则表达式,您会认为它是一个贪婪的匹配。此模式将无法匹配在.kdb
之前包含.
的路径。有关此问题的更详细讨论和解决方法,请参阅here
最后,根据Android文档,host
和scheme
属性都是pathPattern
属性工作所必需的,所以只需将其设置为通配符就可以匹配任何内容。
现在,如果你在像Linda file Manager这样的应用程序中选择了一个.kdb
文件,我的应用程序就会显示为一个选项。我应该注意的是,这本身并不允许您在浏览器中下载此文件类型,因为这只在文件方案中注册。在你的手机上安装一个像Linda File Manager这样的应用程序,通常会让你下载任何类型的文件。
发布于 2011-05-24 07:26:30
Brian上面的回答让我走了90%的路。为了完成它,对于我使用的mime类型
android:mimeType="*/*"
我怀疑之前的帖子试图发布相同的细节,但引用了星号斜杠作为代码,stackoverflow显示它只是一个斜杠。
发布于 2009-11-14 19:58:06
尝试使用android:mimeType
,而不是android:path
,它的值是这段特定内容的MIME类型。此外,android:path
不接受通配符--为此使用android:pathPattern
。
https://stackoverflow.com/questions/1733195
复制相似问题