1、显式 Intent
通过直接 指定组件名 ,而不是 Actoin、Category 形式
demo
// 创建 Intent时,直接指定要启动的 组件 —— 紧耦合
Intent intent = new Intent(this, IntentSecondActivity.class);
startActivity(intent);
或者
Intent intent = new Intent();
intent.setComponent( Component名字 ) ;
2、隐式 Intent (Action、 Category)
通过指定 ** Actoin、Category **形式
-
Action:动作
一个 Intent 只有 1个Action
-
Category:分类
一个 Intent 可以有 多个 Category;
主调端:
intent **不用显示添加**,系统默认添加默认 category —— intent.addCategory()
被调端:
默认Category 必须**手动添加 配置文件**
<category android:name="android.intent.category.DEFAULT">
-
调用:
Action 与 至少1个 Category (可以是默认的) 都匹配,才能响应
demo
// 调用端
Intent intent = new Intent();
intent.setAction("component.activity.ACTION");
intent.addCategory("component.activity.CATEGORY");
startActivity(intent);
<!-- 被调用 Intent 端 的配置文件-->
<activity
android:name="component.activity.IntentSecondActivity"
android:label="@string/intent_second" >
<intent-filter >
<action android:name="component.activity.ACTION"/>
<!-- 默认 Category —— 没有其他 Category 时,必须添加默认配置 -->
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="component.activity.CATEGORY" />
</intent-filter>
</activity>
3、隐式 Intent ( Data )
通过 Data 指定 Intent 能响应的 数据类型
被调用端 设置 ** data ** 标签,可以设置任意个种类
- scheme
- host
- port
- path
- mimeType
demo
// 主调用端
Intent intent = new Intent();
intent.setAction("component.activity.ACTION");
intent.addCategory("component.activity.CATEGORY");
intent.setData(Uri.parse("http://www.baidu.com:8080/file.py"));
// 被调用端
<intent-filter>
<action android:name="component.activity.ACTION" />
<category android:name="android.intent.category.DEFAULT" />
<!-- scheme, host, port, path -->
<data
android:scheme="http"
android:host="www.baidu.com"
android:port="8080"
android:path="file.py"
>
</data>
</intent-filter>
4、传递数据
-
发送端
调用
putExtra( )
添加数据 -
接收端
调用
getIntent( )
获取 Intent再
intent.getXXXXXExtra()
获取相应数据
demo
// 发送端,添加、发送数据
intent.putExtra("key", "value");
startActivity(intent);
// 接收端,接收、读取数据
Intent intent = getIntent();
String valueString = intent.getStringExtra("key");
5、数据回传给上个 Activity
调用、回传流程:
-
主调用端 :
调用
startActivityForResult( intent, requestCode( int 值 ) )
启动下一个 Activity -
被调用端
创建添加数据的 intent ,调用
setResult( RESULT_OK, intent )
向上个 组件返回数据 -
主调用端
由于调用了
startActivityForResult( )
来启动 组件,此时需重写onActivityResult( requestCode, resultCode, intent )
函数,在其中判断、获取返回来的结果
demo
// 主调用端
// 启动可回传数据的 Activity
int requestCode = 10;
startActivityForResult(intent, requestCode);
// 被调用端 —— 回传数据
Intent resultIntent = new Intent();
intent.putExtra("name", "Sandiego");
setResult(RESULT_OK, resultIntent); // 设置回传数据
// 主调用端 —— 处理回传结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 10:
if ( resultCode == RESULT_OK ) {
String result = data.getStringExtra("name");
}
break;
default:
break;
}
}