Intent的Data属性和Type属性解析
Data属性和Type属性的相互覆盖
Intent的Data和Type的值会相互覆盖,即如果先设置Data的值,后设置Type的值,Data的值
会被Type的值覆盖,反过来也是这样,想既有Data的值也有Type的值,那么就要调用Intent
的setDataAndType()方法。
Data属性和Type属性的设置
在AndroidMainifest.xml文件中为组件声明Data,Type属性都通过<data../>元素设置的,格式:
<data android:mimeType="" //声明该组件所能匹配的Intent的Type属性 android:scheme="" //声明该组件所能匹配的Intent的Data属性的scheme部分 android:host="" //声明该组件所能匹配的Intent的Data属性的host部分 android:port="" //声明该组件所能匹配的Intent的Data属性的port部分 android:path="" //声明该组件所能匹配的Intent的Data属性的path部分 android:pathPrefix="" //声明该组件所能匹配的Intent的Data属性的path前缀 android:pathPattern=""/>//声明该组件所能匹配的Intent的Data属性的path字符串模板
Type属性匹配
Type属性对应组件中<data.../>子元素的mimeType的值必须相同,才能启动组件。
Data属性的匹配
Data属性的Uri对象实际可分为scheme,host,port和path部分,此时并不要求这四个部分的值
必须和<data../>子元素的android:scheme,android:host,android:port,android:path
完全满足。有以下匹配条件:
1.如果目标组件<data.../>子元素只指定android:scheme属性,那么只要Intent的Data属性
的scheme部分与android:scheme属性值相同,即可启动该组件。
2.如果目标组件<data.../>子元素只指定android:scheme属性,android:host属性,那么只
要Intent的Data属性的scheme,host部分与android:scheme,android:host属性值相同
,即可启动该组件。
3.如果目标组件<data.../>子元素只指定android:scheme属性,android:host,android:port
属性,那么要求Intent的Data属性的scheme,host,port部分与android:scheme,
android:host,android:port属性值相同,即可启动该组件。
4.如果目标组件<data.../>子元素只指定android:scheme,android:host,android:path,
属性,那么只要求Intent的Data属性的scheme,host,path部分与android:scheme,
android:host,android:path的属性值相同,即可启动该组件。
5.如果目标组件<data.../>子元素只指定android:scheme,android:host,android:port,
android:path,属性,那么就要求Intent的Data属性的scheme,host,port,path部分依次
与android:scheme,android:host,android:port,android:path的属性值相同,即可启
动该组件。