1.Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,
Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递 Intent 来执行动作和产生事件。
使用 Intent 可以激活 Android 应用的三个核心组件:活动(Activity)、服务(Service)和广播接收器(BroadcastReceiver)。
2.Intent可以划分成显式意图和隐式意图。
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
如: 在 MainActicity 中打开一个新的 Acticity – OtherActivity
1. Intent intent = new Intent();
2. intent.setComponent(new ComponentName(MainActivity.this, OtherActivity.class));
3. 第二行代码可以更换为:intent.setClass(MainActivity.this, OtherActivity.class);
4. 也可以使用构造器来指定组件: Intent intent = new Intent(MainActivity.this, OtherActivity.class)
隐式意图:没有明确指定组件名的Intent为隐式意图。
Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(data: URI和数据类型)找到最合适的组件来处理这个意图
例如拨打电话的意图:
Uri uri = Uri.parse(“tel:” + phoneCode);
Intent intent = new Intent(Intent.ACTION_CALL, uri);
对于隐式意图,,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。
如一个点击方法(内含隐式意图):
//显式意图 :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起),一般激活自己应用的组件的时候 采用显示意图
//隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之间没有耦合),激活别人写的应用 隐式意图, 不需要关心对方的包名和类名
public void click(View view) {
// 打 action
// 人 数据
// 附件的数据 Category 类别
Intent intent = new Intent();
//action要与清单文件中一致
intent.setAction("com.intent2.open2");
//要加参数Category类别
intent.addCategory(Intent.CATEGORY_DEFAULT);
// URL:统一资源定位符 http https ftp rtsp: URI:统一资源标识符 url是uri的一个子集
// intent.setData(Uri.parse("jianren:张三"));
// intent.setType("application/person");
intent.setDataAndType(Uri.parse("jianren:张三"), "application/person");
startActivity(intent);
}
清单文件中为:
<activity android:name="com.intent2.SecondActivity" >
<intent-filter>
<action android:name="com.intent2.open2" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/person" />
<data android:scheme="jianren" />
</intent-filter>
</activity>