W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Intent 是對(duì)象之間傳遞信息的載體。例如,當(dāng)一個(gè) Ability 需要啟動(dòng)另一個(gè) Ability 時(shí),或者一個(gè) AbilitySlice 需要導(dǎo)航到另一個(gè) AbilitySlice 時(shí),可以通過(guò) Intent 指定啟動(dòng)的目標(biāo)同時(shí)攜帶相關(guān)數(shù)據(jù)。Intent 的構(gòu)成元素包括 Operation 與 Parameters,具體描述參見(jiàn)表1。
屬性 | 子屬性 | 描述 |
---|---|---|
Operation | Action | 表示動(dòng)作,通常使用系統(tǒng)預(yù)置Action,應(yīng)用也可以自定義Action。例如IntentConstants.ACTION_HOME表示返回桌面動(dòng)作。 |
Entity | 表示類(lèi)別,通常使用系統(tǒng)預(yù)置Entity,應(yīng)用也可以自定義Entity。例如Intent.ENTITY_HOME表示在桌面顯示圖標(biāo)。 | |
Uri | 表示Uri描述。如果在Intent中指定了Uri,則Intent將匹配指定的Uri信息,包括scheme, schemeSpecificPart, authority和path信息。 | |
Flags | 表示處理Intent的方式。例如Intent.FLAG_ABILITY_CONTINUATION標(biāo)記在本地的一個(gè)Ability是否可以遷移到遠(yuǎn)端設(shè)備繼續(xù)運(yùn)行。 | |
BundleName | 表示包描述。如果在Intent中同時(shí)指定了BundleName和AbilityName,則Intent可以直接匹配到指定的Ability。 | |
AbilityName | 表示待啟動(dòng)的Ability名稱(chēng)。如果在Intent中同時(shí)指定了BundleName和AbilityName,則Intent可以直接匹配到指定的Ability。 | |
DeviceId | 表示運(yùn)行指定Ability的設(shè)備ID。 | |
Parameters | - | Parameters是一種支持自定義的數(shù)據(jù)結(jié)構(gòu),開(kāi)發(fā)者可以通過(guò)Parameters傳遞某些請(qǐng)求所需的額外信息。 |
當(dāng) Intent 用于發(fā)起請(qǐng)求時(shí),根據(jù)指定元素的不同,分為兩種類(lèi)型:
通過(guò)構(gòu)造包含 BundleName 與 AbilityName 的 Operation 對(duì)象,可以啟動(dòng)一個(gè) Ability、并導(dǎo)航到該 Ability。示例代碼如下:
Intent intent = new Intent();
// 通過(guò) Intent 中的 OperationBuilder 類(lèi)構(gòu)造 operation 對(duì)象,指定設(shè)備標(biāo)識(shí)(空串表示當(dāng)前設(shè)備)、應(yīng)用包名、Ability 名稱(chēng)
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.demoapp")
.withAbilityName("com.demoapp.FooAbility")
.build();
// 把 operation 設(shè)置到 intent 中
intent.setOperation(operation);
startAbility(intent);
作為處理請(qǐng)求的對(duì)象,會(huì)在相應(yīng)的回調(diào)方法中接收請(qǐng)求方傳遞的 Intent 對(duì)象。以導(dǎo)航到另一個(gè) Ability 為例,導(dǎo)航的目標(biāo) Ability 可以在其 onStart() 回調(diào)的參數(shù)中獲得Intent對(duì)象。
有些場(chǎng)景下,開(kāi)發(fā)者需要在應(yīng)用中使用其他應(yīng)用提供的某種能力,而不感知提供該能力的具體是哪一個(gè)應(yīng)用。例如開(kāi)發(fā)者需要通過(guò)瀏覽器打開(kāi)一個(gè)鏈接,而不關(guān)心用戶(hù)最終選擇哪一個(gè)瀏覽器應(yīng)用,則可以通過(guò) Operation 的其他屬性(除 BundleName 與 AbilityName 之外的屬性)描述需要的能力。如果設(shè)備上存在多個(gè)應(yīng)用提供同種能力,系統(tǒng)則彈出候選列表,由用戶(hù)選擇由哪個(gè)應(yīng)用處理請(qǐng)求。以下示例展示使用 Intent 跨 Ability 查詢(xún)天氣信息。
請(qǐng)求方
在 Ability 中構(gòu)造 Intent 以及包含 Action 的 Operation 對(duì)象,并調(diào)用 startAbilityForResult() 方法發(fā)起請(qǐng)求。然后重寫(xiě) onAbilityResult() 回調(diào)方法,對(duì)請(qǐng)求結(jié)果進(jìn)行處理。
private void queryWeather() {
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withAction(Intent.ACTION_QUERY_WEATHER)
.build();
intent.setOperation(operation);
startAbilityForResult(intent, REQ_CODE_QUERY_WEATHER);
}
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
switch (requestCode) {
case REQ_CODE_QUERY_WEATHER:
// Do something with result.
...
return;
default:
...
}
}
處理方
{
"module": {
...
"abilities": [
{
...
"skills":[
{
"actions":[
"ability.intent.QUERY_WEATHER"
]
}
]
...
}
]
...
}
...
}
@Override
protected void onStart(Intent intent) {
...
addActionRoute(Intent.ACTION_QUERY_WEATHER, DemoSlice.class.getName());
...
}
@Override
protected void onActive() {
...
Intent resultIntent = new Intent();
setResult(0, resultIntent);
...
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: