【Android】Intent 和 Intent Filter 官方文档读后总结

Intent 和 Intent Filter

1. <action/>包含在 <intent-filter></intent-filter> 标签对里,而且是必不可少的!不管以哪一种方式来匹配,都不可缺少这个<action/> ,可以有多个,至少要有一个。

如有多个的,话只需要匹配其中一个即可找到这个activity

<action>里的属性值大多数是在Intent里定义的,比如<actionandroid:name="android.intent.action.VIEW"/>里的属性值就等于Intent.ACTION_VIEW,

在这个Intent类里以ACTION开头定义的常量都是。当然,也可以自定义。

2.任何一个需要隐式启动的Activity都必须要有这项:<categoryandroid:name="android.intent.category.DEFAULT"/>

例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题

<category>里的属性值大多数是在Intent里定义的,比如<categoryandroid:name="android.intent.category.DEFAULT"/>里的属性值就等于Intent.CATEGORY_DEFAULT,

在这个Intent类里以CATEGORY开头定义的常量都是。当然,也可以自定义。

3.一个Activity里可以有多对<intent-filter></intent-filter>只要匹配其中一对,即可启动这个Activity

4.在<intent-filter></intent-filter>里可以有多个<dataandroid:mimeType="xxxx"/>,只需匹配其中一个即可.注意:不可以同时出现第5点的标签对,即下面这条。

5.在<intent-filter></intent-filter>里可以有多个<dataandroid:scheme="xxxx"android:host="yyyy"android:port="uuu"/>,只需匹配其中一个即可。

语法:

<dataandroid:host="string"

android:mimeType="string"

android:path="string"

android:pathPattern="string"

android:pathPrefix="string"

android:port="string"

android:scheme="string"/>

可以分开写,如:

<dataandroid:scheme="something"android:host="project.example.com"android:port="80"/>

等同于这样写:

<dataandroid:scheme="something"/>

<dataandroid:host="project.example.com"/>

<dataandroid:port="80"/>

在java代码里,Uri的格式:scheme://host:port/pathorpathPrefixorpathPattern

注意:不可以同时出现第4点的标签对,即上面那条。

6.在<intent-filter></intent-filter>里可以有多个<actionandroid:name="xxxx">,只需匹配其中一个即可。

7.当匹配不上任何Activity的话,会发生异常,跳出对话框:很抱歉...某某应用程序意外停止,请重试。

8.上面所说的全部适用于Service和BroadcastReceiver,只需把<activity...></activity>换成<service...></service>或<receiver...></receiver>即可。

9.刚参考了一下packages\apps\HTMLViewer\AndroidManifest.xml,第4和第5条应该是不冲突才对,但是实际测试中却是冲突,暂时未到找原因。匹配方式请看:用于打开HTML文件的intent

在被启动的Activity(本例为MyActivityTwo)里接收数据:

Intentintent=getIntent();

StringintentCategories=intent.getCategories()

StringintentType=intent.getType();

Uriuri=intent.getData();

StringuriScheme=uri.getScheme();

StringuriPath=uri.getPath();

StringuriHost=uri.getHost();

String uriEncodedPath = uri.getEncodedPath();

原文http://www.eoeandroid.com/thread-94077-1-1.html

说明http://www.cnblogs.com/Android_2011/archive/2011/06/12/2078643.html

相关推荐