1暴凑、顯式 Intent
通過(guò)直接 指定組件名 凡泣,而不是 Actoin藏鹊、Category 形式
demo
// 創(chuàng)建 Intent時(shí)赔嚎,直接指定要啟動(dòng)的 組件 —— 緊耦合
Intent intent = new Intent(this, IntentSecondActivity.class);
startActivity(intent);
或者
Intent intent = new Intent();
intent.setComponent( Component名字 ) ;
2膘盖、隱式 Intent (Action、 Category)
通過(guò)指定 ** Actoin尤误、Category **形式
-
Action:動(dòng)作
一個(gè) Intent 只有 1個(gè)Action
-
Category:分類
一個(gè) Intent 可以有 多個(gè) Category衔憨;
主調(diào)端:
intent **不用顯示添加**,系統(tǒng)默認(rèn)添加默認(rèn) category —— intent.addCategory()
被調(diào)端:
默認(rèn)Category 必須**手動(dòng)添加 配置文件**
<category android:name="android.intent.category.DEFAULT">
-
調(diào)用:
Action 與 至少1個(gè) Category (可以是默認(rèn)的) 都匹配袄膏,才能響應(yīng)
demo
// 調(diào)用端
Intent intent = new Intent();
intent.setAction("component.activity.ACTION");
intent.addCategory("component.activity.CATEGORY");
startActivity(intent);
<!-- 被調(diào)用 Intent 端 的配置文件-->
<activity
android:name="component.activity.IntentSecondActivity"
android:label="@string/intent_second" >
<intent-filter >
<action android:name="component.activity.ACTION"/>
<!-- 默認(rèn) Category —— 沒(méi)有其他 Category 時(shí)践图,必須添加默認(rèn)配置 -->
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="component.activity.CATEGORY" />
</intent-filter>
</activity>
3、隱式 Intent ( Data )
通過(guò) Data 指定 Intent 能響應(yīng)的 數(shù)據(jù)類型
被調(diào)用端 設(shè)置 ** data ** 標(biāo)簽沉馆,可以設(shè)置任意個(gè)種類
- scheme
- host
- port
- path
- mimeType
demo
// 主調(diào)用端
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"));
// 被調(diào)用端
<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揖盘、傳遞數(shù)據(jù)
-
發(fā)送端
調(diào)用
putExtra( )
添加數(shù)據(jù) -
接收端
調(diào)用
getIntent( )
獲取 Intent再
intent.getXXXXXExtra()
獲取相應(yīng)數(shù)據(jù)
demo
// 發(fā)送端,添加锌奴、發(fā)送數(shù)據(jù)
intent.putExtra("key", "value");
startActivity(intent);
// 接收端兽狭,接收、讀取數(shù)據(jù)
Intent intent = getIntent();
String valueString = intent.getStringExtra("key");
5鹿蜀、數(shù)據(jù)回傳給上個(gè) Activity
調(diào)用箕慧、回傳流程:
-
主調(diào)用端 :
調(diào)用
startActivityForResult( intent, requestCode( int 值 ) )
啟動(dòng)下一個(gè) Activity -
被調(diào)用端
創(chuàng)建添加數(shù)據(jù)的 intent ,調(diào)用
setResult( RESULT_OK, intent )
向上個(gè) 組件返回?cái)?shù)據(jù) -
主調(diào)用端
由于調(diào)用了
startActivityForResult( )
來(lái)啟動(dòng) 組件茴恰,此時(shí)需重寫onActivityResult( requestCode, resultCode, intent )
函數(shù)颠焦,在其中判斷、獲取返回來(lái)的結(jié)果
demo
// 主調(diào)用端
// 啟動(dòng)可回傳數(shù)據(jù)的 Activity
int requestCode = 10;
startActivityForResult(intent, requestCode);
// 被調(diào)用端 —— 回傳數(shù)據(jù)
Intent resultIntent = new Intent();
intent.putExtra("name", "Sandiego");
setResult(RESULT_OK, resultIntent); // 設(shè)置回傳數(shù)據(jù)
// 主調(diào)用端 —— 處理回傳結(jié)果
@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;
}
}