0%

Intent-过滤器

Intent过滤器

这个东西就是一个过滤器,用于过滤intent发送给Activity信息的时候对发送对象的一个过滤,那么我们具体怎么使用呢?
首先我们需要用隐式Intent进行消息的发送,首先我们对我们的Activity进行过滤器的设置例如如下:

1
2
3
4
5
<intent-filter >
<action android:name="com.wker.top"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"/>
</intent-filter>

例如这个样子,我们需要设置intent的时候是这个样子的:

1
2
3
4
5
Intent intent = new Intent();
intent.setAction("com.wker.top");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("http:"));
startActivity(intent);

这个时候我们需要注意,我们设置的协议scheme的时候是http,但是我们要用Data数据的时候我们需要填写完整的‘http:’,这个使我们需要注意的,这个时候我们就能成功的打开我们的页面了,那么我们看到Data还有好多的属性,我们继续设置。主要看我们的Data数据设置和我们的URI的一个设置。
<data android:scheme="http" android:host="wker666.github.io" android:port="80" android:path="/Android"/>
intent.setData(Uri.parse("http://wker666.github.io:80/Android"));
其实可以看到也就是按照一个URL类似的格式进行填写的。
Intent过滤器中的category属性称之为类别判定,其实也很好理解,就是对于APP类型的一个判定(我猜的,因为我看到值有default和browser这类的值,所以我感觉应该就是),而且这里还需要注意,可以设置多个category是不会影响的,就是说一个正确了其他的不正确也不影响。

而且category这个节点的属性是必须存在的!!!

下面说说Data这个节点的属性,有点繁杂,但是也是比较好用的,重点的上面提到了,主要说说那个mimeType:

文件拓展名 MIMEType
png image/png
bmp\dib image/bmp
jpg\jpeg\jpg image/ipeg
gif image/gif
mp3 audio/mpeg
mp4\mpg4\m4v\mp4v video/mp4
js application/javascript
pdf application/pdf
text\txt text/plan
json application/json
xml text/xml

这个就是从网上摘录的一部分,在网站上经常见到,就是来设定格式的,在渗透测试中需要注意就是只是单纯的过滤这个格式的话呢是存在漏洞的,之后再提这个,但是在Win32中这个东西简直是个噩梦,之后有机会再说。
这个东西有点两样,谷歌把他单纯的分离出来了,而且它的函数比较特殊,我们来看一下。
SetDateThis method automaticallyclears any type that was previously set by setType or setTypeAndNormalize. *
很怪,这东西的意思是说会清除我们之前设置的setType,然而我们我们的setType这个也是:
This method automatically clears any data that waspreviously set (for example by setData). *
就是一个矛盾的函数,那么我们怎么办?谷歌给我们了一个方法专门用来解决这个问题:
intent.setDataAndType(data, type)
这个方法就是可以解决的,我们的XML设置:

1
2
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http" android:host="wker666.github.io" android:port="80" android:path="/Android" android:mimeType="text/plan"/>

Intent设置:

1
intent.setDataAndType(Uri.parse("http://wker666.github.io:80/Android"), "text/plan");

这个样子就是正常了的!