鴻蒙OS IntentAgent開發(fā)指導(dǎo)

2020-09-18 11:21 更新

場(chǎng)景介紹

IntentAgent封裝了一個(gè)指定行為的 Intent,可以通過(guò) triggerIntentAgent 接口主動(dòng)觸發(fā),也可以與通知綁定被動(dòng)觸發(fā)。具體的行為包括:?jiǎn)?dòng) Ability 和發(fā)送公共事件。例如:收到通知后,在點(diǎn)擊通知后跳轉(zhuǎn)到一個(gè)新的 Ability,不點(diǎn)擊則不會(huì)觸發(fā)。

接口說(shuō)明

IntentAgent 相關(guān)基礎(chǔ)類包括 IntentAgentHelperIntentAgentInfo、 IntentAgentConstantTriggerInfo,基礎(chǔ)類之間的關(guān)系如下圖所示:

圖1 IntentAgent 基礎(chǔ)類關(guān)系圖

img

  • IntentAgentHelper

IntentAgentHelper封裝了獲取、激發(fā)、取消IntentAgent等靜態(tài)方法。

接口名 描述
getIntentAgent(Context context, IntentAgentInfo paramsInfo) 獲取一個(gè) IntentAgent 實(shí)例。
triggerIntentAgent(Context context, IntentAgent agent, IntentAgent.Oncompleted onCompleted, EventHandler handler, TriggerInfo paramsInfo) 主動(dòng)激發(fā)一個(gè) IntentAgent 實(shí)例。
cancel(IntentAgent agent) 取消一個(gè) IntentAgent 實(shí)例。
judgeEquality(IntentAgent agent, IntentAgent otherAgent) 判斷兩個(gè) IntentAgent 實(shí)例是否相等。
getHashCode(IntentAgent agent) 獲取一個(gè) IntentAgent 實(shí)例的哈希碼。
getBundleName(IntentAgent agent) 獲取一個(gè) IntentAgent 實(shí)例的包名。
getUid(IntentAgent agent) 獲取一個(gè) IntentAgent 實(shí)例的用戶ID。

  • IntentAgentInfo

IntentAgentInfo 類封裝了獲取一個(gè) IntentAgent 實(shí)例所需的數(shù)據(jù)。使用構(gòu)造函數(shù) IntentAgentInfo(int requestCode, OperationType operationType, List <Flags> flags, List <Intent> intents, IntentParams extraInfo) 獲取 IntentAgentInfo 對(duì)象。

  • requestCode:使用者定義的一個(gè)私有值。
  • operationType:為 IntentAgentConstant.OperationType 枚舉中的值。
  • flags:為 IntentAgentConstant.Flags 枚舉中的值。
  • intents:將被執(zhí)行的意圖列表。operationType 的值為 START_ABILITY,START_SERVICE 和 SEND_COMMON_EVENT 時(shí),intents 列表只允許包含一個(gè) Intent;operationType 的值為 START_ABILITIES 時(shí),intents 列表允許包含多個(gè) Intent
  • extraInfo:表明如何啟動(dòng)一個(gè)有頁(yè)面的 ability,可以為 null,只在operationType 的值為 START_ABILITY 和 START_ABILITIES 時(shí)有意義。

  • IntentAgentConstant

IntentAgentConstant 類中包含 OperationType 和 Flags 兩個(gè)枚舉類:

類名 枚舉值
IntentAgentConstant.OperationType UNKNOWN_TYPE:不識(shí)別的類型。START_ABILITY:開啟一個(gè)有頁(yè)面的 Ability。START_ABILITIES:開啟多個(gè)有頁(yè)面的 Ability。START_SERVICE:開啟一個(gè)無(wú)頁(yè)面的 ability。SEND_COMMON_EVENT:發(fā)送一個(gè)公共事件。
IntentAgentConstant.Flags ONE_TIME_FLAG:IntentAgent 僅能使用一次。只在 operationType 的值為 START_ABILITY,START_SERVICE 和 SEND_COMMON_EVENT 時(shí)有意義。NO_BUILD_FLAG:如果描述 IntentAgent 對(duì)象不存在,則不創(chuàng)建它,直接返回 null。只在 operationType 的值為 START_ABILITY, START_SERVICE 和 SEND_COMMON_EVENT 時(shí)有意義。CANCEL_PRESENT_FLAG:在生成一個(gè)新的IntentAgent 對(duì)象前取消已存在的一個(gè) IntentAgent 對(duì)象。只在 operationType 的值為 START_ABILITY,START_SERVICE 和 SEND_COMMON_EVENT 時(shí)有意義。 UPDATE_PRESENT_FLAG:使用新的 IntentAgent 的額外數(shù)據(jù)替換已存在的 IntentAgent 中的額外數(shù)據(jù)。只在 operationType 的值為 START_ABILITY,START_SERVICE 和 SEND_COMMON_EVENT 時(shí)有意義。CONSTANT_FLAG:IntentAgent 是不可變的。 REPLACE_ELEMENT:當(dāng)前I ntent 中的 element 屬性可被 IntentAgentHelper.triggerIntentAgent() 中 Intent 的 element 屬性取代。 REPLACE_ACTION: 當(dāng)前 Intent 中的 action 屬性可被 IntentAgentHelper.triggerIntentAgent()中 Intent 的 action 屬性取代。 REPLACE_URI:當(dāng)前 Intent 中的 uri 屬性可被 IntentAgentHelper.triggerIntentAgent() 中 Intent 的 uri 屬性取代。 REPLACE_ENTITIES:當(dāng)前 Intent 中的 entities 屬性可被 IntentAgentHelper.triggerIntentAgent() 中 Intent 的 entities 屬性取代。 REPLACE_BUNDLE:當(dāng)前 Intent 中的 bundleName 屬性可被 IntentAgentHelper.triggerIntentAgent() 中 Intent 的 bundleName 屬性取代。

  • TriggerInfo

TriggerInfo 類封裝了主動(dòng)激發(fā)一個(gè) IntentAgent 實(shí)例所需的數(shù)據(jù),使用構(gòu)造函數(shù)TriggerInfo( String permission, IntentParams extraInfo, Intent intent, int code) 獲取 TriggerInfo 對(duì)象。

  • permission:IntentAgent 的接收者的權(quán)限名稱,只在 operationType 的值為 SEND_COMMON_EVENT 時(shí),該參數(shù)才有意義。
  • extraInfo:激發(fā) IntentAgent 時(shí)用戶自定義的額外數(shù)據(jù)。
  • intent:額外的 Intent。如果 IntentAgentInfo 成員變量 flags 包含CONSTANT_FLAG,則忽略該參數(shù);如果 flags 包含 REPLACE_ELEMENT,REPLACE_ACTION,REPLACE_URI,REPLACE_ENTITIES 或 REPLACE_BUNDLE,則使用額外 Intent 的 element,action,uri,entities 或 bundleName 屬性替換原始 Intent 中對(duì)應(yīng)的屬性。如果 intent 是空,則不替換原始 Intent 的屬性。
  • code:提供給 IntentAgent 目標(biāo)的結(jié)果碼。

開發(fā)步驟

獲取 IntentAgent 的代碼示例如下:

// 指定要啟動(dòng)的Ability的BundleName和AbilityName字段
// 將Operation對(duì)象設(shè)置到Intent中
Operation operation = new Intent.OperationBuilder()
        .withDeviceId("")
        .withBundleName("com.huawei.testintentagent")
        .withAbilityName("com.huawei.testintentagent.entry.IntentAgentAbility")
        .build();
intent.setOperation(operation);
List<Intent> intentList = new ArrayList<>();
intentList.add(intent);
// 定義請(qǐng)求碼
int requestCode = 200;
// 設(shè)置flags
List<Flags> flags = new ArrayList<>();
flags.add(Flags.UPDATE_PRESENT_FLAG);
// 指定啟動(dòng)一個(gè)有頁(yè)面的Ability
IntentAgentInfo paramsInfo = new IntentAgentInfo(requestCode, IntentAgentConstant.OperationType.START_ABILITY, flags, intentList, null);
// 獲取IntentAgent實(shí)例
IntentAgent agent = IntentAgentHelper.getIntentAgent(this, paramsInfo);

通知中添加 IntentAgent 的代碼示例如下:

int notificationId = 1;
NotificationRequest request = new NotificationRequest(notificationId);
String title = "title";
String text = "There is a normal notification content.";
NotificationNormalContent content = new NotificationNormalContent();
content.setTitle(title)
       .setText(text);
NotificationContent notificationContent = new NotificationContent(content);
request.setContent(notificationContent); // 設(shè)置通知的內(nèi)容
request.setIntentAgent(agent); // 設(shè)置通知的 IntentAgent

主動(dòng)激發(fā) IntentAgent 的代碼示例如下:

int code = 100;
IntentAgentHelper.triggerIntentAgent(this, agent, null, null, new TriggerInfo(null, null, null, code ));
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)