问题:
如何让我的应用程序无条件地打开文件和 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结尾的路径。Urifilecontent
我的应用程序使用它打开的几个示例路径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 thehttp scheme and when I specifyscheme="*" , it disqualifies my application from opening ANY scheme. I've also tried adding moredata` 模式,但我感觉好像只有一个生效,因为那没有完全帮助我。
因此,指定http将允许 for http,但显然不允许file或content不指定schemedisables http。
我无法从所有不同的方案中打开。
重申一下,考虑到这些复杂性,我怎样才能让我的应用程序无条件地打开文件和 url 扩展名?