使用call事件拉起指定UIAbility到后臺

2024-01-25 12:21 更新

許多應用希望借助卡片的能力,實現(xiàn)和應用在前臺時相同的功能。例如音樂卡片,卡片上提供播放、暫停等按鈕,點擊不同按鈕將觸發(fā)音樂應用的不同功能,進而提高用戶的體驗。在卡片中使用postCardAction接口的call能力,能夠?qū)⒖ㄆ峁┓綉玫闹付║IAbility拉到后臺。同時,call能力提供了調(diào)用應用指定方法、傳遞數(shù)據(jù)的功能,使應用在后臺運行時可以通過卡片上的按鈕執(zhí)行不同的功能。

通常使用按鈕控件來觸發(fā)call事件,示例代碼如下:

  • 在卡片頁面中布局兩個按鈕,點擊其中一個按鈕時調(diào)用postCardAction向指定UIAbility發(fā)送call事件,并在事件內(nèi)定義需要調(diào)用的方法和傳遞的數(shù)據(jù)。需要注意的是,method參數(shù)為必選參數(shù),且類型需要為string類型,用于觸發(fā)UIAbility中對應的方法。
    1. @Entry
    2. @Component
    3. struct WidgetCard {
    4. build() {
    5. Column() {
    6. Button('功能A')
    7. .margin('20%')
    8. .onClick(() => {
    9. console.info('call EntryAbility funA');
    10. postCardAction(this, {
    11. 'action': 'call',
    12. 'abilityName': 'EntryAbility', // 只能跳轉(zhuǎn)到當前應用下的UIAbility
    13. 'params': {
    14. 'method': 'funA' // 在EntryAbility中調(diào)用的方法名
    15. }
    16. });
    17. })
    18. Button('功能B')
    19. .margin('20%')
    20. .onClick(() => {
    21. console.info('call EntryAbility funB');
    22. postCardAction(this, {
    23. 'action': 'call',
    24. 'abilityName': 'EntryAbility', // 只能跳轉(zhuǎn)到當前應用下的UIAbility
    25. 'params': {
    26. 'method': 'funB', // 在EntryAbility中調(diào)用的方法名
    27. 'num': 1 // 需要傳遞的其他參數(shù)
    28. }
    29. });
    30. })
    31. }
    32. .width('100%')
    33. .height('100%')
    34. }
    35. }
  • 在UIAbility中接收call事件并獲取參數(shù),根據(jù)傳遞的method不同,執(zhí)行不同的方法。其余數(shù)據(jù)可以通過readString的方式獲取。需要注意的是,UIAbility需要onCreate生命周期中監(jiān)聽所需的方法。
    1. import UIAbility from '@ohos.app.ability.UIAbility';
    2. function FunACall(data) {
    3. // 獲取call事件中傳遞的所有參數(shù)
    4. console.log('FunACall param:' + JSON.stringify(data.readString()));
    5. return null;
    6. }
    7. function FunBCall(data) {
    8. console.log('FunACall param:' + JSON.stringify(data.readString()));
    9. return null;
    10. }
    11. export default class CameraAbility extends UIAbility {
    12. // 如果UIAbility第一次啟動,在收到call事件后會觸發(fā)onCreate生命周期回調(diào)
    13. onCreate(want, launchParam) {
    14. try {
    15. // 監(jiān)聽call事件所需的方法
    16. this.callee.on('funA', FunACall);
    17. this.callee.on('funB', FunBCall);
    18. } catch (error) {
    19. console.log('register failed with error. Cause: ' + JSON.stringify(error));
    20. }
    21. }
    22. // 進程退出時,解除監(jiān)聽
    23. onDestroy() {
    24. try {
    25. this.callee.off('funA');
    26. this.callee.off('funB');
    27. } catch (error) {
    28. console.log('register failed with error. Cause: ' + JSON.stringify(error));
    29. }
    30. }
    31. };
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號