您的位置:首页 > 移动开发 > Android开发

Android学习之——intent-fliter配置之data属性

2013-08-23 14:41 441 查看
Data属性通常用来向Action属性提供操作的数据。Data属性接受一个Uri对象,比如:

content://com/android.contacts/contacts/1
Uri对象满足如下格式:

scheme://host:port/path or pathPrefix or pathPattern(这里的是scheme而不是schema)

比如上面的Uri字符串,content就是scheme部分,com.android.contacts就是host部分,port就是端口,这里省略,contacts/1就是path部分。

在代码中进行定义的时候Data属性和Type属性会进行相互覆盖:

如果为intent先设置Type属性,然后设置Data属性,Type属性就会被Data属性所覆盖。

Intent intent = new Intent();
intent.setType("abc/bcd");
intent.setData(Uri.parse("http://www.baidu.com"));
Toast.makeText(MainActivity.this, intent.toString(), Toast.LENGTH_LONG).show();




如果为intent先设置Data属性,然后设置Type属性,Data属性就会被Type属性所覆盖

Intent intent = new Intent();
intent.setData(Uri.parse("http://www.baidu.com"));
intent.setType("abc/bcd");
Toast.makeText(MainActivity.this, intent.toString(), Toast.LENGTH_LONG).show();




那么,如果希望同时设置Intent的Data属性和Type属性,应调用Intent的setDataAndType()方法

Intent intent = new Intent();
intent.setDataAndType(Uri.parse("http://www.baidu.com"), "abc/bcdz");
Toast.makeText(MainActivity.this, intent.toString(), Toast.LENGTH_LONG).show();




AndroidManifest.xml中 data属性的具体格式如下:

<data
android:mimeType=""
android:scheme=""
android:host=""
android:port=""
android:path=""
android:pathPrefix=""
android:pathPattern=""/>


mimeType:用来设置该Data所指定的Uri对应的MIME类型,可自定义,只要符合abc/def格式即可。声明该组件所能匹配的Intent的Type属性。
scheme:用来声明该组件所能匹配的Intent的Data属性的scheme部分。
host:用来声明该组件所能匹配的Intent的Data属性的host部分。
port:用来声明该组件所能匹配的Intent的Data属性的port部分。
path:用来声明该组件所能匹配的Intent的Data属性的path部分。
pathPrefix:用来声明该组件所能匹配的Intent的Data属性的path前缀。
pathPattern:用来声明该组件所能匹配的Intent的Data属性的path字符串模版。

启动组件时的要求:

Intent的Type属性也用于指定该Intent的要求,必须对应组件中<intent-filter.../>元素中<data.../>子元素的mimeType属性与此相同,才能启动该组件。

Data属性的匹配,在匹配时,会先检查<intent-filter.../>里<data.../>的子元素:

如果目标组件的<data.../>子元素只指定了android:scheme属性,那么只要Intent的Data属性的scheme部分与android:scheme属性相同,就可以启动该组件。
如果目标组件<data.../>指定了android:scheme,android:host属性,则需要Intent的Data属性指定为具有相同的scheme,和host,则可以启动该组件。
<data.../>指定了android:scheme,android:host,android:port属性,那么Inent的Data属性要指定相同的scheme,host,port才可以启动该组件。
。。。。其余相同与上面类似,不一一列举。

data子元素在配置的时候是可选的,但又是相互依存的,比如,如果没有配置scheme,那么其他所有的Uri属性都被忽略;如果host没有配置,那么port以及path,pathPrefix,pathPattern都会被忽略(不起作用)。

如果希望<data.../>子元素正常起作用,至少要在<intent-filter.../>中配置一个<action.../>子元素,该子元素的android:name可任意定义。

下面附上官方API对于data的阐释:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: