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