精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙開發:啟動遠程PageAbility 僅對系統應用開放

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

啟動遠程PageAbility(僅對系統應用開放)

啟動遠程PageAbility同樣通過featureAbility中的startAbility接口實現。

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

由于當前DeviceManager的getTrustedDeviceListSync接口僅對系統應用開放,故現階段非系統應用無法獲取其他設備信息,無遠程啟動設備選擇入口,遠程啟動Ability開發。

表1 featureAbility接口說明

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

表2 deviceManager接口說明

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

在跨設備場景下,啟動遠程PageAbility首先需要向用戶申請數據同步的權限,相關接口說明如下:

表3 AtManager接口說明

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

表4 context接口說明

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

如下示例代碼展示了向用戶申請數據同步權限的方法:

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() {
    //...
  }
}

在獲取數據同步權限后,需要獲取可信設備列表,進行設備選擇。

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

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

設備選擇完成后,通過調用startAbility接口,顯式啟動遠程PageAbility。

如下示例展示了通過startAbility顯式啟動遠程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() {
    //...
  }
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8499

    瀏覽量

    150839
  • 鴻蒙
    +關注

    關注

    57

    文章

    2310

    瀏覽量

    42747
收藏 人收藏

    評論

    相關推薦

    學習鴻蒙背后的價值?星河版開放如何學習?

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

    HarmonyOS/OpenHarmony應用開發-PageAbility開發體驗

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

    華為升級鴻蒙系統開放的機型名單

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

    多家頭部企業宣布「啟動鴻蒙原生應用開發」,你看好鴻蒙系統走向「獨立」嗎?

    鴻蒙生態迎「關鍵一戰」,多家頭部企業宣布「啟動鴻蒙原生應用開發」,你看好鴻蒙系統走向「獨立」嗎?
    的頭像 發表于 01-24 11:47 ?539次閱讀
    多家頭部企業宣布「<b class='flag-5'>啟動</b><b class='flag-5'>鴻蒙</b>原生應用<b class='flag-5'>開發</b>」,你看好<b class='flag-5'>鴻蒙</b><b class='flag-5'>系統</b>走向「獨立」嗎?

    哪吒汽車APP啟動鴻蒙原生應用開發

    哪吒汽車正式簽約,啟動鴻蒙原生應用開發;在5月17日,在上海市經濟和信息化委員會指導的“千帆競發啟航 共筑鴻蒙生態——HDD上海站·鴻蒙原生
    的頭像 發表于 05-18 09:48 ?1144次閱讀

    鴻蒙開發:【PageAbility組件概述+配置】

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

    鴻蒙開發:【PageAbility的生命周期】

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

    鴻蒙開發PageAbility啟動模式

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

    鴻蒙開發:創建PageAbility

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

    鴻蒙開發啟動本地PageAbility

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

    鴻蒙開發:停止PageAbility

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

    鴻蒙開發啟動指定頁面

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

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

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

    鴻蒙開發Ability Kit程序框架服務:Stage模型啟動FA模型PageAbility

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

    鴻蒙開發Ability Kit程序框架服務:PageAbility切換 組件切換

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