【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