Intent是Android程序中各组件之间进行交互的重要方式,除了能指明当前组件想要执行的动作,还能在不同组件之间传递数据。Intent一般被用于启动活动,启动服务及发送广播。Intent大致可以分为显式Intent和隐式Intent
显式Intent
- Intent有多个构造函数的重载,其中一个是
Intent(Context packageContext,Class<?> cls)
。这个构造函数接收的两个参数,第一个是启动活动的上下文,第二个参数是指定启动的目标。要使用这个Intent,我们要用到startActivity()
方法,它接收一个Intent参数,我们只要将创建好的Intent传入就行了
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
}
- 这里添加了一个Button按钮并创建了它的点击事件,当点击这个按钮时,便会跳转到SecondActivity活动中
隐式Intent
- 隐式Intent与显式Intent不同,它并不会明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息。打开AndroidManifest.xml,添加如下代码:
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.Second" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
- 然后修改Button的点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("android.intent.action.Second");
startActivity(intent);
}
});
- 只有
<action>
和<category>
能够同时匹配到Intent中指定的action和categroy时,这个活动才响应Intent。android.intent.category.DEFAULT
是默认的categroy,调用startActivity()
方法时会自动添加进去