startActivity(intent);
只有action和Category同时匹配时,才能响应这个Intent。intent Filter中如果category没有指定,必须使用默认的。intent设置时没有添加category时为自动添加默认的category。每个Intent中只能指定一个action,但可以指定多个category。一个Intent Filter中可以包含多个action和category。
data(数据)和type(数据类型)
data是要访问的数据,用URI表示,通常情况下,使用action+data属性的组合来描述一个意图:做什么。intent Filter中声名时可以只是一个数据类型(type),一条 URI ,或者同时包括数据类型和 URI 。
setData() 方法只能以 URI 来指定数据,setType() 只能以元类型指定数据,setDataAndType() 可以同时指定 URI 和元类型。URI 通过 getData() 读取,类型通过 getType() 读取。如果Intent对象中既包含Uri又包含Type,那么,在中也必须二者都包含才能通过。
Data属性与Type属性的关系比较微妙,这两个属性会相互覆盖,例如:
如果为Intent先设置Data属性,后设置Type属性,那么Type属性将会覆盖Data属性。
如果为Intent先设置Type属性,后设置Data属性,那么Data属性将会覆盖Type属性。
如果希望Intent既有Data属性,也有Type属性,则应该调用Intent的setDataAndType() 方法。
注:
Uri字符串总满格式:scheme://host:port/path,例如content://com.android.contacts/contacts/1tel:4536,其中 content 是 scheme 部分, com.android.contacts 是 host 部分,port 部分被省略了,/contacts/1 是 path 部分。
Data属性并不要求被启动组件的<intent-filter…/>中<data…/>之元素android:scheme、android:host、android:port、android:path 完全满足。比如:
如果目标组件的<data…/>子元素只指定了 android:scheme属性,那么只要Intent的Data 属性的scheme部分与android:scheme属性值相同,即可启动该组件。
这里有两点需要注意:
如果<data…/>子元素只有android:port属性,没有指定android:host属性,那么android.port属性将不会起作