intent的作用是在各组件中进行交互,在不同组件之间传递数据。
一、Intent基本介绍:
1、Intent 用于封装程序的”调用意图“。两个Activity之间,可以把需要交换的数据封装成Bundle对象,然后使用Intent携带Bundle对象,实现两个Activity之间的数据交换;
2、Intent还是各种应用程序组件之间通信的重要媒介。不管想启动一个Acitivity、Service还是BroadcastReceiver,Android均使用统一的Intent对象来封装这种”启动意图“。很明显使用Intent提供了一致的编程模型;
3、Intent还有一个好处,如果应用程序只是想启动具有某种特征的组件,并不想和某个具体的组件耦合,则可以通过在intent-filter中配置相应的属性进行处理,与stucts2中的MVC框架思路类似。
4、Intent对象大致包括7大属性:ComponentName、 Action 、 Category 、 Data 、Type、 Extra 、Flag。
二、intent的分类:
指定了ComponentName属性的Intent已经明确了它将要启动哪个组件,因此这种Intent被称为显式Intent,没有指定ComponentName属性的Intent被称为隐式Intent。隐式Intent没有明确要启动哪个组件,应用会根据Intent指定的规则去启动符合条件的组件。
显式intent:
Intent(Context packageContext,Class<?>cls)这个构造函数接受两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。
Intent intent = new Intent();
ComponentName cName = new ComponentName(MainActivity.this,Main2Activity.class);
intent.setComponent(cName);
startActivity(intent);
实际上,以上的写法会简化成下面这种写法:
Intent intent=new Intent(MainActivity.this,Main2Activity.class);//显示intent
startActivity(intent);
隐式Intent
使用隐式Intent,不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能互享成为可能。比如说在活动中打开一个网页,只需要调用系统的浏览器打开网页就可以了。
Intent intent=new Intent(Intent.ACTION_VIEW);
Intent.setData(Uri.parse("www.baidu.com"));
startActivity(intent);
Intent.ACTION_VIEW是安卓系统的内置动作,通过Uri.parse()方法,将一个网址字符串解析成Uri对象,再调用setData()方法将这个Uri对象传递进去。然后呢打开活动就可以看到系统打开了系统浏览器.
三、intent的七大属性:
Intent对象大致包括7大属性:ComponentName、 Action 、 Category 、 Data 、Type、 Extra 、Flags。
-
Action作为标识符,代表一个Intent,当一个Activity需要外部协助处理时,就会发出一个Intent,如果一个程序能完成相应功能,只要在intent-filter加上这个这个intent就可以了。
-
Data保存需要传递的数据格式,比如:tel://
-
Extras保存需要传递的额外数据。
-
Category表示Intent的种类,从android上启动Activity有多种方式,比如 程序列表、桌面图标、点击Home激活的桌面等等,Category则用来标识这些Activity的图标会出现在哪些启动的上下文环境里。
-
ComponentName属性除了可以判断显示隐式,还能实现一个app跳到另外一个app。
Intent intent = new Intent();
ComponentName cName = new ComponentName(
"com.steven.testasyncloader.sqlitedata","com.steven.testasyncloader.sqlitedata.MainActivity&#