深入学习深入学习Android中的中的Intent
Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,使用Intent可以激活Android应
用的三种类型的核心组件:活动Activity、服务Service、广播接受者Broadcast。
Intent又分为隐士意图隐士意图和显示意图显示意图。
显示意图:显示意图:调用intent.setComponent()、intent.setClassName()或者intent.setClass()方法明确的制定组件名的Intent为显示意
图,显示意图明确的制定要激活哪一个组件。
隐士意图:隐士意图:没有明确的制定组件的名称;下边是一个隐士意图的案例
首先应该在清单文件中添加相应的intent-filter
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".IntentActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".OtherActivity" android:label="@string/windowtitle">
<intent-filter >
<action android:name="cn.itcast.zhangxx"/>
<action android:name="cn.itcast.laoli"/>
<category android:name="cn.itcast.category.java"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="cn.itcast.category.php"/>
<data android:scheme="itcast" android:host="www.itcast.cn" android:path="/liming"/>
<data android:mimeType="image/*"/>
</intent-filter>
</activity>
</application>
在MainActivity.java中
public void openActivity(View v){
/**
* (没设数据参数的情况下)只要Intent中的Action和Category都出现在Intent-Filter中,就能与之匹配,否则匹配失败
*/
Intent intent = new Intent();//隐式意图激活Activity
intent.setAction("cn.itcast.zhangxx");
intent.addCategory("cn.itcast.category.java");
// intent.setData(Uri.parse("itcast://www.itcast.cn/liming"));
// intent.setType("image/jpeg");
//根据Android的API可以知道
//This method automatically clears any data that was previously set (for example by setData(Uri)).
//也就是说如果设置了setData方法在设置setType方法的话,那么setType方法就会clers掉setData方法
//解决方案如下:
intent.setDataAndType(Uri.parse("itcast://www.itcast.cn/liming"), "image/jpeg");
startActivity(intent);//方法内部为Intent添加了android.intent.category.DEFAULT类别
}
如下是隐士意图的匹配规则:隐士意图的匹配规则:
Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方
面会被参考到:动作、数据(URI以及数据类型)和类别。
动作测试(动作测试(Action test))
一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果
将如下:
评论0