问题:
如何让我的应用程序无条件地打开文件和 url 扩展名?
我对设置我的设置intent-filter
束手无策,因为这一切都没有任何意义。我的最终目标是打开任何path
以某个扩展名结尾的东西。举个例子,让我们选择“.riley”作为我的目标扩展。
我的基础`意图过滤器`
<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:host="*"
android:mimeType="*/*"
android:pathPattern=".*\\.riley" />
</intent-filter>
这目前可以从file
和打开content
。
问题 #1:路径模式
对于初学者来说,data
参数pathPattern
似乎没有任何作用,正如我设置的那样:
<data
android:host="*"
android:mimeType="*/*"
android:pathPattern=".*\\.riley" />
..但我仍然可以在and方案下打开不以“.riley”Intent
结尾的路径。Uri
file
content
我的应用程序使用它打开的几个示例路径intent-filter
是:
Path: /storage/sdcard0/Download/MyApp.apk
Path: /messagesByAccount/1
为了清楚起见,“路径:”只是我自己在日志中添加的内容。第一个来自file
方案下的gmail,第二个来自方案下的gtalk content
。鉴于此,我已经对如何intent-filters
工作感到困惑。
和计划pathPattern
被忽略了file
。content
问题 #2:在浏览器中打开
我试图让我的应用程序从浏览器打开“.riley”扩展名,但是重定向链接没有 MIME 类型,所以我mimeType
从模式中删除了值data
(我android:mimeType="*/*"
之前有,因为 MIME 类型不是t 一致),这使我可以很好地从重定向 URL 中打开。
当我尝试从浏览器打开一个直接的“.riley” URL(例如:http ://thisisnotarealdomainname.com/myfile.riley )并且从我的应用程序打开的选项消失时,问题就出现了。将mimeType
值添加回我的data
模式允许我从直接 URL 打开。
intent-filter
不允许我同时打开直接和间接 URL 。
问题 #3:方案
我希望能够从多种不同的方案类型中打开(例如:http,
文件,
内容), but as soon as I remove
方案altogether, it disqualifies my application from opening the
http scheme and when I specify
scheme="*" , it disqualifies my application from opening ANY scheme. I've also tried adding more
data` 模式,但我感觉好像只有一个生效,因为那没有完全帮助我。
因此,指定http
将允许 for http
,但显然不允许file
或content
不指定scheme
disables http
。
我无法从所有不同的方案中打开。
重申一下,考虑到这些复杂性,我怎样才能让我的应用程序无条件地打开文件和 url 扩展名?