接着上一篇的内容,下面我们再来看看Intent的Data与Type属性。
一、Data属性与Type属性
Data属性通常用于向Action属性 提供操作的数据,Data属性接受一个Uri对象
格式:scheme://host:port/path
例如:
content://com.android.contacts/contacts/1
tel:123
其中prot部分被省略了,contacts/1是path部分。
Type属性用于指定该Data所指定Uri所对应的MIME类型,这种MIME类型可以是自定义的,但是要符合abc/xyz格式。
二、Data属性与Type属性之间的关系
三、Data属性与Type属性的匹配方式Type属性和Data同时出现会出现覆盖现象,如果要同时设置要使用setDataAndType()方法,举例如下:
//Type属性被Data覆盖 public void overrideType(View source){ Intent intent = new Intent(); intent.setType("abc/xyz"); intent.setData(Uri.parse("lee://www.baidu.com:80/test")); } //Data属性被Type覆盖 public void overrideData(View source){ Intent intent = new Intent(); intent.setData(Uri.parse("lee://www.baidu.com:80/test")); intent.setType("abc/xyz"); } //同时设置Data和Type public void dataAndType(View source){ Intent intent = new Intent(); intent.setDataAndType( Uri.parse("lee://www.baidu.com:80/test"), "abc/xyz"); }在manifest配置文件中配置Activity的方法如下<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <data android:mimeType="" <!-- Type属性 --> android:scheme="" <!-- scheme部分 --> android:host="" <!-- host部分 --> android:port="" <!-- port部分 --> android:path="" <!-- path部分 --> android:pathPrefix="" <!-- path前缀 --> android:pathPattern=""/> <!-- path模版 --> </intent-filter>
Type属性也是用户指定组件匹配的组件,Type是需要严格匹配的。
Data属性则不需要严格匹配,过程如下:
如果指定了android:scheme属性,那么只要Intent的Data属性的scheme部分与android:scheme属性相同就可以启动该组件。
如果制定了android:scheme属性和android:host需要两个属性与Intent的Data部分的该部分相同则启动该组件。
如果定制了android:scheme、android:host、android:port属性则需要与该部分相同才能启动该组件。
...................
四、小练习
五、Intent的其他属性Intent intent = new Intent(); String data = "http://blog.csdn.net/dawanganban"; Uri uri = Uri.parse(data); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent);Intent intent = new Intent(); String data = "content://com.android.contacts/contacts/1"; Uri uri = Uri.parse(data); intent.setData(uri); startActivity(intent);Intent intent = new Intent(); String data = "tel:10000"; Uri uri = Uri.parse(data); intent.setData(uri); startActivity(intent);
Extra属性:用于在多个Activity之间传递数据,该属性其实是一个Bundle对象,后面在Activity间传值的文章中将会介绍。
Flag属性:一些额外的控制旗标,在后面将会详细介绍。