当在Android中使用Custom Protocol时,需要在AndroidManifest.xml中,增加相应的intent-filter标签。
其中intent-filter下的data标签,通知了Android,何时处理调用请求,其语法如下:
<data android:scheme="string" android:host="string" android:port="string" android:path="string" android:pathPattern="string" android:pathPrefix="string" android:mimeType="string" />
其实,上述内容描述了一个URI,当第三方调阅请求不符合该URI时,会直接忽略;而当第三方调阅请求符合该URI时,则会进行调用或让用户进行选择。
URI的具体规则如下:
<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
如果没有指定scheme,则整个URI无效;
如果没有指定host,则port属性无效;
其各属性说明如下:
scheme:就是协议名称,如http,https,myprotocol等,建议全部小写,而且不包含“:”。
host:ip地址或域名,建议全部小写。
port:端口
path:完全路径匹配
pathPrefix:路径前缀匹配
pathPattern:路径匹配规则(例如:“*”表示字符重复出现0到多次;“.”表示任意字符;“.*”表示0到多个任意字符;转义符为“\”,由于xml的格式限制,非转义的“*”要写为“\\*”,非转移的“\”要写为“\\\\”。)
mimeType:指定MIME类型,如image/jpeg,其中子类型可以使用通配符“*”,建议全部小写。
<!--http协议下的任何pdf文件--> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="http" android:pathPattern=".*\\.pdf"]</data> </intent-filter> <!--任何音频文件--> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="audio/*" /> </intent-filter> <!--自定义私有协议myproto的任何请求--> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="myproto"/> </intent-filter>
参考资料:
Android开发手册
newcj的博客