一、显式 Intent
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
二、隐式 Intent
1. 在<activity>下配置<intent-filter>
<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>
2. 只有<action>和<category>中的内容 同时 匹配上 Intent 中指定的时,活动才能响应 Intent。
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
- android.intent.category.DEFAULT 是一种默认的category, 在调用
startActivity() 方法的时候会自动将这个 category 添加到 Intent 中。
- 每个 Intent 只能指定一个 action,但能指定多个 category。
3. 更多隐式 Intent 用法。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
三、向下一个活动传递数据
1. FirstActivity 利用 putExtra 暂存在 Intent 中:
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
2. SecondActivity 从 Intent 中取出:
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
四、返回数据给上一个活动
1. 修改 FirstActivity,1 是请求码,用于在回调中判断数据的来源。
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
2. SecondActivity 中构建一个 Intent 只用于传递数据。setResult() 第一个参数一般为 RESULT_OK 或 RESULT_CANCELED。
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
3. 活动被销毁后会回调上一个活动的 onActivityResult()。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}