Intent-Filter简介及URI

Intent-Filter又称意图过滤器,在Intent-Filter中存在三个属性,分别是action、category、data,在activity类中进行intent操作时,他会根据action、category、data进行匹配。
匹配依次会进行如下几步:

动作测试:

即先对action进行匹配,如果找到与之某一项匹配时,进行第二步匹配。

类别测试:

即第二步匹配,在类别测试中,对于进行隐式意图时,必不可少的一个属性就是

< category android:name="android.Intent.Category.DEFAULT" />,同样与上一步一样找到某一项匹配就进行下一步匹配操作。

数据测试:

即第三步匹配,在数据测试中,会有很多属性,这里主要讲以下几个:

android:scheme 协议

android:host       主机/IP

android:port        端口

android:path       路径

我们在activity类中,通过intent来调用setData方法时,传输的参数是一个Uri,那么对于一个Uri,它必有一个规则,比如说, 这里http就是他的协议,在Intent-Filter中的data中设置他的android:scheme="http",blog.csdn.net就是他的主机,即android:host="blog.csdn.net",huai814586181就是他的路径,即android:path="/huai814586181",那么还有一个端口呢?就在主机后面加上一个冒号再加端口号就可以了,同样在Intent-Filter中设置如下:android:port="端口号"。

在匹配的时候,我们还可以加一个android:mimeType,参数的话设置为


超文本标记语言文本 .html text/html


xml文档 .xml text/xml


XHTML文档 .xhtml application/xhtml+xml


普通文本 .txt text/plain


RTF文本 .rtf application/rtf


PDF文档 .pdf application/pdf


Microsoft Word文件 .word application/msword


PNG图像 .png image/png


GIF图形 .gif image/gif


JPEG图形 .jpeg,.jpg image/jpeg


au声音文件 .au audio/basic


MIDI音乐文件 mid,.midi audio/midi,audio/x-midi


RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio


MPEG文件 .mpg,.mpeg video/mpeg


AVI文件 .avi video/x-msvideo


GZIP文件 .gz application/x-gzip


TAR文件 .tar application/x-tar


任意的二进制数据 application/octet-stream


后面那一串。以上参数来自于mime百度百科。自个儿可以百度一下就知道了。


这里主要讲一个注意点,就是在同时使用setData和setType时遇到的问题,当我们单单是这样用,是不可以的,看一下下面的截图就明白了:




android requestNetWork切换网络 android netfilter_android

android requestNetWork切换网络 android netfilter_android_02



在使用setType时,会自动清除setData设置的,在使用setData的时候会自动清除setType设置的。


那如果想两个都用该怎么办呢?


这里提供了这样一个方法:


intent.setDataAndType(data, type),把这两个合二为一的一个方法。



在上面提到了URI,那么来简单说一下什么是URI。


URI,全称Uniform Resource Identifier,中文叫做统一资源标识符。用于标识某一互联网资源名称的字符串。


在URI中又包含了两个子集:URL和URN


URL:Uniform Resource Locator,统一资源定位符


目前URI的最普遍形式就是无处不在的URL或统一资源定位器。


URN:Uniform Resource Name,统一资源名称。


URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。


现在最常用的就是URL了。这个简单了解一下。。。