Intent是什么?
简单地说,intent是安卓程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
Intent可以简单地分成显式Intent和隐式Intent。显式Intent
显式Intent中,其中一个构造函数的重载是Intent(Context packageContext, Class<?> cls) ,前者是要启动活动的上下文,后者是被启动的目标活动。
假设我们有两个活动: FirstActivity, SecondeActivity, 分别有两个按钮,命名为button1 和button 2
//FirstActivity 点击按钮button启动SecondActivity
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);//Activity类的内建函数,用于执行intent
}
});
- 隐式Intent
隐式Intent并不指定要启动什么活动,而是指定了一些列更为抽象的action和category信息,由系统来判断执行什么Intent,而只有<action>和<category>中的内容能够同时匹配Intent中指定的action和category时,这个活动才能响应Intent。
在AndroidMainfest.xml中指定将要响应的action和category:
<activity
android:name=".SecondActivity"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="com.example.linhualuo.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
修改button1的点击事件:
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.linhualuo.activitytest.ACTION_START");
startActivity(intent);//
}
});
现在点击button1就可以启动SecondeActivity啦
实际上,每个Intent只能指定一个action,但是可以指定多个category,对AndroidMainfest.xml进行修改:
<activity
android:name=".SecondActivity"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="com.example.linhualuo.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.linhualuo.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>
然后在button1的点击事件里面调用Intent的addCategory()方法,可以添加指定的category:
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.linhualuo.activitytest.ACTION_START");
intent.addActivity("com.example.linhualuo.activitytest.MY_CATEGORY");
startActivity(intent);
}
});
这样就可以实现启动SecondActivity啦。