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

2020-09-18 11:21 更新

場景介紹

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

接口說明

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) 獲取一個 IntentAgent 實例。
triggerIntentAgent(Context context, IntentAgent agent, IntentAgent.Oncompleted onCompleted, EventHandler handler, TriggerInfo paramsInfo) 主動激發(fā)一個 IntentAgent 實例。
cancel(IntentAgent agent) 取消一個 IntentAgent 實例。
judgeEquality(IntentAgent agent, IntentAgent otherAgent) 判斷兩個 IntentAgent 實例是否相等。
getHashCode(IntentAgent agent) 獲取一個 IntentAgent 實例的哈希碼。
getBundleName(IntentAgent agent) 獲取一個 IntentAgent 實例的包名。
getUid(IntentAgent agent) 獲取一個 IntentAgent 實例的用戶ID。

  • IntentAgentInfo

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

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

  • IntentAgentConstant

IntentAgentConstant 類中包含 OperationType 和 Flags 兩個枚舉類:

類名 枚舉值
IntentAgentConstant.OperationType UNKNOWN_TYPE:不識別的類型。START_ABILITY:開啟一個有頁面的 Ability。START_ABILITIES:開啟多個有頁面的 Ability。START_SERVICE:開啟一個無頁面的 ability。SEND_COMMON_EVENT:發(fā)送一個公共事件。
IntentAgentConstant.Flags ONE_TIME_FLAG:IntentAgent 僅能使用一次。只在 operationType 的值為 START_ABILITY,START_SERVICE 和 SEND_COMMON_EVENT 時有意義。NO_BUILD_FLAG:如果描述 IntentAgent 對象不存在,則不創(chuàng)建它,直接返回 null。只在 operationType 的值為 START_ABILITY, START_SERVICE 和 SEND_COMMON_EVENT 時有意義。CANCEL_PRESENT_FLAG:在生成一個新的IntentAgent 對象前取消已存在的一個 IntentAgent 對象。只在 operationType 的值為 START_ABILITY,START_SERVICE 和 SEND_COMMON_EVENT 時有意義。 UPDATE_PRESENT_FLAG:使用新的 IntentAgent 的額外數(shù)據(jù)替換已存在的 IntentAgent 中的額外數(shù)據(jù)。只在 operationType 的值為 START_ABILITY,START_SERVICE 和 SEND_COMMON_EVENT 時有意義。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 類封裝了主動激發(fā)一個 IntentAgent 實例所需的數(shù)據(jù),使用構(gòu)造函數(shù)TriggerInfo( String permission, IntentParams extraInfo, Intent intent, int code) 獲取 TriggerInfo 對象。

  • permission:IntentAgent 的接收者的權(quán)限名稱,只在 operationType 的值為 SEND_COMMON_EVENT 時,該參數(shù)才有意義。
  • extraInfo:激發(fā) IntentAgent 時用戶自定義的額外數(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 中對應(yīng)的屬性。如果 intent 是空,則不替換原始 Intent 的屬性。
  • code:提供給 IntentAgent 目標(biāo)的結(jié)果碼。

開發(fā)步驟

獲取 IntentAgent 的代碼示例如下:

  1. // 指定要啟動的Ability的BundleName和AbilityName字段
  2. // 將Operation對象設(shè)置到Intent中
  3. Operation operation = new Intent.OperationBuilder()
  4. .withDeviceId("")
  5. .withBundleName("com.huawei.testintentagent")
  6. .withAbilityName("com.huawei.testintentagent.entry.IntentAgentAbility")
  7. .build();
  8. intent.setOperation(operation);
  9. List<Intent> intentList = new ArrayList<>();
  10. intentList.add(intent);
  11. // 定義請求碼
  12. int requestCode = 200;
  13. // 設(shè)置flags
  14. List<Flags> flags = new ArrayList<>();
  15. flags.add(Flags.UPDATE_PRESENT_FLAG);
  16. // 指定啟動一個有頁面的Ability
  17. IntentAgentInfo paramsInfo = new IntentAgentInfo(requestCode, IntentAgentConstant.OperationType.START_ABILITY, flags, intentList, null);
  18. // 獲取IntentAgent實例
  19. IntentAgent agent = IntentAgentHelper.getIntentAgent(this, paramsInfo);

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號