0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā):啟動遠(yuǎn)程PageAbility 僅對系統(tǒng)應(yīng)用開放

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-19 09:34 ? 次閱讀

啟動遠(yuǎn)程PageAbility(僅對系統(tǒng)應(yīng)用開放)

啟動遠(yuǎn)程PageAbility同樣通過featureAbility中的startAbility接口實現(xiàn)。

除引入'@ohos.ability.featureAbility'外,還需引入'@ohos.distributedHardware.deviceManager',通過DeviceManager(該組件提供帳號無關(guān)的分布式設(shè)備的認(rèn)證組網(wǎng)能力)的getTrustedDeviceListSync接口(獲取信任設(shè)備列表)獲取遠(yuǎn)端的deviceId,寫入want中,用于啟動遠(yuǎn)程PageAbility。

由于當(dāng)前DeviceManager的getTrustedDeviceListSync接口僅對系統(tǒng)應(yīng)用開放,故現(xiàn)階段非系統(tǒng)應(yīng)用無法獲取其他設(shè)備信息,無遠(yuǎn)程啟動設(shè)備選擇入口,遠(yuǎn)程啟動Ability開發(fā)。

表1 featureAbility接口說明

接口名接口描述 ** 開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔**:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]點(diǎn)擊或者復(fù)制轉(zhuǎn)到。
startAbility(parameter: StartAbilityParameter)啟動Ability。
startAbilityForResult(parameter: StartAbilityParameter)啟動Ability,并在該Ability被銷毀時返回執(zhí)行結(jié)果。

表2 deviceManager接口說明

接口名接口描述
getTrustedDeviceListSync(): Array同步獲取所有可信設(shè)備列表。

在跨設(shè)備場景下,啟動遠(yuǎn)程PageAbility首先需要向用戶申請數(shù)據(jù)同步的權(quán)限,相關(guān)接口說明如下:

表3 AtManager接口說明

接口名接口描述
checkAccessToken(tokenID: number, permissionName: string) : Promise校驗應(yīng)用是否授予權(quán)限。使用Promise異步回調(diào)。返回值GrantStatus。建議使用checkAccessToken代替verifyAccessToken(已廢棄),verifyAccessToken從API version 9開始不再維護(hù)。

表4 context接口說明

接口名接口描述
requestPermissionsFromUser(permissions: Array, requestCode: number, resultCallback: AsyncCallback< PermissionRequestResult>): void以callback形式從系統(tǒng)請求某些權(quán)限,詳見對應(yīng)[接口文檔]。

如下示例代碼展示了向用戶申請數(shù)據(jù)同步權(quán)限的方法:

import abilityAccessCtrl from "@ohos.abilityAccessCtrl";
import featureAbility from '@ohos.ability.featureAbility';
import bundle from '@ohos.bundle.bundleManager';
import hilog from '@ohos.hilog';

const TAG: string = 'PagePageAbilitySecond'
const domain: number = 0xFF00;

@Entry
@Component
struct PagePageAbilitySecond {
  async requestPermission(): Promise< void > {
    hilog.info(domain, TAG, 'RequestPermission begin');
    let array: Array< string > = ['ohos.permission.DISTRIBUTED_DATASYNC'];
    let bundleFlag = 0;
    let tokenID: number | undefined = undefined;
    let userID = 100;
    let appInfo = await bundle.getApplicationInfo('com.samples.famodelabilitydevelop', bundleFlag, userID);
    tokenID = appInfo.accessTokenId;
    let atManager = abilityAccessCtrl.createAtManager();
    let requestPermissions: Array< string > = [];
    for (let i = 0;i < array.length; i++) {
      let result = await atManager.verifyAccessToken(tokenID, array[i]);
      hilog.info(domain, TAG, 'checkAccessToken result:' + JSON.stringify(result));
      if (result != abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
        requestPermissions.push(array[i]);
      }
    }
    hilog.info(domain, TAG, 'requestPermissions:' + JSON.stringify(requestPermissions));
    if (requestPermissions.length == 0) {
      return;
    }
    let context = featureAbility.getContext();
    context.requestPermissionsFromUser(requestPermissions, 1, (error, data) = > {
      hilog.info(domain, TAG, 'error:' + error.message + ',data:' + JSON.stringify(data));
      hilog.info(domain, TAG, 'data requestCode:' + data.requestCode);
      hilog.info(domain, TAG, 'data permissions:' + data.permissions);
      hilog.info(domain, TAG, 'data authResults:' + data.authResults);
    });
    hilog.info(domain, TAG, 'RequestPermission end');
  }

  build() {
    //...
  }
}

在獲取數(shù)據(jù)同步權(quán)限后,需要獲取可信設(shè)備列表,進(jìn)行設(shè)備選擇。

如下示例展示了通過getAvailableDeviceListSync獲取可信設(shè)備列表,選擇設(shè)備的方法。

import deviceManager from '@ohos.distributedDeviceManager';
import promptAction from '@ohos.promptAction';
import hilog from '@ohos.hilog';

const TAG: string = 'PagePageAbilitySecond'
const domain: number = 0xFF00;

@Entry
@Component
struct PagePageAbilitySecond {
  @State deviceID: string = '';
  
  getRemoteDeviceId(): void {
    let dmClass: deviceManager.DeviceManager;
    dmClass = deviceManager.createDeviceManager('com.samples.famodelabilitydevelop');
    try {
      if (typeof dmClass === 'object' && dmClass !== null) {
        let list = dmClass.getAvailableDeviceListSync();
        if (typeof (list) == undefined || list.length == 0) {
          hilog.info(domain, TAG, 'EntryAbility onButtonClick getRemoteDeviceId err: list is null');
          return;
        }
        hilog.info(domain, TAG, `EntryAbility onButtonClick getRemoteDeviceId success[${list.length}]:` + JSON.stringify(list[0]));
        if (list[0].networkId != undefined) {
          this.deviceID = list[0].networkId;
        }
        promptAction.showToast({
          message: this.deviceID
        });
      } else {
        hilog.info(domain, TAG, 'EntryAbility onButtonClick getRemoteDeviceId err: dmClass is null');
      }
    } catch (error) {
      hilog.info(domain, TAG, `getRemoteDeviceId error, error=${error}, message=${error.message}`);
    }
  }

  build() {
    //...
  }
}

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

新文檔.png

設(shè)備選擇完成后,通過調(diào)用startAbility接口,顯式啟動遠(yuǎn)程PageAbility。

如下示例展示了通過startAbility顯式啟動遠(yuǎn)程PageAbility的方法。

import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
import promptAction from '@ohos.promptAction';
import { BusinessError } from '@ohos.base';
import hilog from '@ohos.hilog';

const TAG: string = 'PagePageAbilitySecond'
const domain: number = 0xFF00;

@Entry
@Component
struct PagePageAbilitySecond {
  @State deviceID: string = '';
  
  onStartRemoteAbility(): void {
    hilog.info(domain, TAG, 'onStartRemoteAbility begin');
    let wantValue: Want = {
      bundleName: 'ohos.samples.distributedmusicplayer',
      abilityName: 'ohos.samples.distributedmusicplayer.MainAbility',
      deviceId: this.deviceID, // this.deviceID的獲取方式在前面的示例代碼中
    };
    hilog.info(domain, TAG, 'onStartRemoteAbility want=' + JSON.stringify(wantValue));
    featureAbility.startAbility({
      want: wantValue
    }).then((data) = > {
      promptAction.showToast({
        message: $r('app.string.start_remote_success_toast')
      });
      hilog.info(domain, TAG, 'onStartRemoteAbility finished, ' + JSON.stringify(data));
    }).catch((error: BusinessError) = > {
      promptAction.showToast({
        message: JSON.stringify(error)
      });
      hilog.error(domain, TAG, 'onStartRemoteAbility failed: ' + JSON.stringify(error));
    });
    hilog.info(domain, TAG, 'onStartRemoteAbility end');
  }
  build() {
    //...
  }
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8257

    瀏覽量

    149973
  • 鴻蒙
    +關(guān)注

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42493
收藏 人收藏

    評論

    相關(guān)推薦

    學(xué)習(xí)鴻蒙背后的價值?星河版開放如何學(xué)習(xí)?

    現(xiàn)在是2024年,華為在1月18開展了鴻蒙千帆起儀式發(fā)布會。宣布了鴻蒙星河版,并對開發(fā)開放申請,此次發(fā)布會主要是說明了,鴻蒙已經(jīng)是全棧自研
    發(fā)表于 02-22 20:55

    HarmonyOS/OpenHarmony應(yīng)用開發(fā)-PageAbility開發(fā)體驗

    功能簡介PageAbility是具備ArkUI實現(xiàn)的Ability,是開發(fā)者具體可見并可以交互的Ability實例。開發(fā)者通過IDE創(chuàng)建Ability時,IDE會自動創(chuàng)建相關(guān)模板代碼
    發(fā)表于 12-08 11:03

    華為升級鴻蒙系統(tǒng)開放的機(jī)型名單

    華為升級鴻蒙系統(tǒng)開放的機(jī)型名單一覽。6 月 2 日,華為舉辦鴻蒙操作系統(tǒng)及華為全場景新品發(fā)布會,在會上華為正式推出了Harmony OS 2
    的頭像 發(fā)表于 06-21 10:54 ?5.7w次閱讀

    多家頭部企業(yè)宣布「啟動鴻蒙原生應(yīng)用開發(fā)」,你看好鴻蒙系統(tǒng)走向「獨(dú)立」嗎?

    鴻蒙生態(tài)迎「關(guān)鍵一戰(zhàn)」,多家頭部企業(yè)宣布「啟動鴻蒙原生應(yīng)用開發(fā)」,你看好鴻蒙系統(tǒng)走向「獨(dú)立」嗎?
    的頭像 發(fā)表于 01-24 11:47 ?455次閱讀
    多家頭部企業(yè)宣布「<b class='flag-5'>啟動</b><b class='flag-5'>鴻蒙</b>原生應(yīng)用<b class='flag-5'>開發(fā)</b>」,你看好<b class='flag-5'>鴻蒙</b><b class='flag-5'>系統(tǒng)</b>走向「獨(dú)立」嗎?

    哪吒汽車APP啟動鴻蒙原生應(yīng)用開發(fā)

    哪吒汽車正式簽約,啟動鴻蒙原生應(yīng)用開發(fā);在5月17日,在上海市經(jīng)濟(jì)和信息化委員會指導(dǎo)的“千帆競發(fā)啟航 共筑鴻蒙生態(tài)——HDD上海站·鴻蒙原生
    的頭像 發(fā)表于 05-18 09:48 ?1054次閱讀

    鴻蒙開發(fā):【PageAbility組件概述+配置】

    PageAbility是包含UI、提供展示UI能力的應(yīng)用組件,主要用于與用戶交互。
    的頭像 發(fā)表于 06-17 18:05 ?415次閱讀

    鴻蒙開發(fā):【PageAbility的生命周期】

    PageAbility生命周期是PageAbility被調(diào)度到INACTIVE、ACTIVE、BACKGROUND等各個狀態(tài)的統(tǒng)稱。PageAbility生命周期流轉(zhuǎn)及狀態(tài)說明見如下圖1、表1所示。
    的頭像 發(fā)表于 06-17 10:05 ?575次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>PageAbility</b>的生命周期】

    鴻蒙開發(fā)PageAbility啟動模式

    啟動模式對應(yīng)PageAbility啟動時的行為,支持單實例模式、多實例模式兩種啟動模式。
    的頭像 發(fā)表于 06-17 14:35 ?239次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:<b class='flag-5'>PageAbility</b>的<b class='flag-5'>啟動</b>模式

    鴻蒙開發(fā):創(chuàng)建PageAbility

    通過DevEco Studio開發(fā)平臺創(chuàng)建PageAbility時,DevEco Studio會在app.js/app.ets中默認(rèn)生成onCreate()和onDestroy()方法,其他方法需要開發(fā)者自行實現(xiàn)。
    的頭像 發(fā)表于 06-18 09:36 ?190次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:創(chuàng)建<b class='flag-5'>PageAbility</b>

    鴻蒙開發(fā)啟動本地PageAbility

    PageAbility相關(guān)的能力通過featureAbility提供,啟動本地Ability通過featureAbility中的startAbility接口實現(xiàn)。
    的頭像 發(fā)表于 06-18 09:29 ?215次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:<b class='flag-5'>啟動</b>本地<b class='flag-5'>PageAbility</b>

    鴻蒙開發(fā):停止PageAbility

    停止PageAbility通過featureAbility中的terminateSelf接口實現(xiàn)。
    的頭像 發(fā)表于 06-18 14:16 ?230次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:停止<b class='flag-5'>PageAbility</b>

    鴻蒙開發(fā)啟動指定頁面

    當(dāng)PageAbility啟動模式設(shè)置為單例時(具體設(shè)置方法和典型場景示例見[PageAbility啟動模式],缺省情況下是單實例模式),若Pag
    的頭像 發(fā)表于 06-19 09:29 ?253次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:<b class='flag-5'>啟動</b>指定頁面

    鴻蒙開發(fā):【組件啟動規(guī)則(FA模型)】

    啟動PageAbility、ServiceAbility,如使用startAbility()等相關(guān)接口。
    的頭像 發(fā)表于 06-22 10:01 ?293次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:【組件<b class='flag-5'>啟動</b>規(guī)則(FA模型)】

    鴻蒙開發(fā)Ability Kit程序框架服務(wù):Stage模型啟動FA模型PageAbility

    本小節(jié)介紹Stage模型的兩種應(yīng)用組件如何啟動FA模型的PageAbility組件。
    的頭像 發(fā)表于 06-26 09:50 ?261次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>Ability Kit程序框架服務(wù):Stage模型<b class='flag-5'>啟動</b>FA模型<b class='flag-5'>PageAbility</b>

    鴻蒙開發(fā)Ability Kit程序框架服務(wù):PageAbility切換 組件切換

    FA模型中PageAbility對應(yīng)Stage模型中的UIAbility,PageAbility切換為UIAbility的方法如下。
    的頭像 發(fā)表于 06-28 11:38 ?249次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>Ability Kit程序框架服務(wù):<b class='flag-5'>PageAbility</b>切換 組件切換