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

android学习五 Intent

2016-08-23 17:53 239 查看
1.Intent是组件间调用的桥梁。

2.Android系统定义了很多Intent

http://developer.android.com/guide/components/intents-common.html

3.Intent

Intent包括的内容可以有以下一个或多个

操作

数据

extra数据

组件名称

包含组件名称的Intent叫显示Intent,否则
叫隐式Intent。显示Intent在做目标活动匹配时会忽略掉除组件名称的其他部分内容。

new Intent(Intent.ACTION_DIAL) //操作

intent.setData(Uri.parse("http://www.google.com")); //数据

putExtra(String name,...);//extra数据

intent.setComponent(new ComponentName("com.android.contacts","com.android.contacts.DialContactsEntryActivity"));//组件名称

4.数据是对URI进行解析的结果,可能是http网页,也可能是ContentProvider...这根据数据模式来确定例如:content:,file:等。

接收的Intent需要通过Intent过滤器来声明是否能处理这种数据模式。

5.预定义的操作

http://developer.android.com/guide/topics/manifest/data-element.html

6.extra数据可以给目标组件提供更多的信息。 extra data通过android.os.Bundle表示,就是键值对的形式,键通常以包名开头,值是任意对象。需要实现android.os.Parcelable接口。

putExtra方法是复制操作。

7.使用组件名称直接调用组件。包名和类名需要完全限定。

8.组件的类别。

预定义的category

http://developer.android.com/reference/android/content/Intent.html#CATEGORY_ALTERNATIVE

9.Intent包括的4部分内容中,如果没有指定组件名称,则为隐式Intent,对于使用隐式Intent来启动其他组件,则对目标组件的确定就是通过剩下3部分综合作用来确定的。

应用应该在声明文件中编写Intent过滤器,用于android系统确定Intent与应用是否匹配。Intent过滤器的格式

如果设置Intent时设置了data(uri),则数据类型应被设置

<intent-filter>

<action android:value="android.intent.action.MAIN" />

<category android:value="android.intent.category.HOME" />

<category android:value="android.intent.category.DEFAULT />

....

</intent-filter>

匹配的基本规则:操作(action),类型(category),数据特征(data android:name 和 data andriod.mimeType)必须与过滤器匹配。

具体的规则:

操作:过滤器不包含则匹配所有操作,如果包括则必须匹配。

数据:过滤器没有指定数据特征则不匹配任何包括数据特征的Intent调用,如果包括则必须匹配。

数据类型 (data android:mimeType):必须匹配。 数据类型的确定有两种方式

a.传入的URI是内容或文件URI,这由ContentProvider或android来确定

b.显示获取intent.getType()。这个需要在客户端构造Intent的时候调用setType(),调用setType就不应该设置URI,因为setType会自动设置。

数据模式,数据授权,数据路径协同匹配,即最长匹配。

Intent类别:调用intent中的所有type必须包含在intent过滤器中。调用intent如果没有包含任何类别则当做default类别,所以希望通过隐式Intent调用的组件必须声明DEFAULT类别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: