一个android程序又多个组件组成,各个组件使用Intent进行通信,intent 对象包含组件名称,动作,数据,根据intent类容,android启动需要的组件。
Intent寻找目标组件的两种方式:
显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
Intent i = new Intent(MainActivity.this,AActivity.class);
startActivity(i);
隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。
Intent i = new Intent();
i.setAction("android.intent.action.DEMO_ACTIVITY");
startActivity(i);
Intent对象包含的内容
1.componentName(组件名称),指定Intent的目标组件的类名称。
Intent intent = new Intent();
// 构造的参数为当前Context和目标组件的类路径名
ComponentName cn = new ComponentName(MainActivity.this, "android.intent.action.DEMO_ACTIVITY");
intent.setComponent(cn);
startActivity(intent);
2.action(动作),指定Intent的执行动作,比如调用拨打电话组件。
3.data(数据),起到表示数据和数据MIME类型的作用。不同的action是和不同的data类型配套的,通过设置data的Uri来获得。
Intent i = new Intent();
Uri uri = Uri.parse("tel:10086");
i.setAction(Intent.ACTION_CALL);
i.setData(uri);
startActivity(i);
4.category(类别),被执行动作的附加信息。例如应用的启动Activity在intent-filter中设置category。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
5.extras(附加信息),为处理Intent组件提供附加的信息。可通过putXX()和getXX()方法存取信息;也可以通过创建Bundle对象,再通过putExtras()和getExtras()方法来存取。
6.flags(标记),指示Android如何启动目标Activity,设置方法为调用Intent的setFlags方法。常用的Flags参数有:
//如果activity在task存在,拿到最顶端,不会启动新的Activity
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
//如果activity在task存在,将Activity之上的所有Activity结束掉
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//默认的跳转类型,将Activity放到一个新的Task中
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//如果Activity已经运行到了Task,再次跳转不会在运行这个Activity
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);