吴忠躺衫网络科技有限公司

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

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

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

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

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

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

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

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

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

表1 featureAbility接口說明

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

表2 deviceManager接口說明

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

在跨設(shè)備場景下,啟動遠程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開始不再維護。

表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è)備列表,進行設(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接口,顯式啟動遠程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() {
    //...
  }
}

審核編輯 黃宇

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

    關(guān)注

    33

    文章

    8694

    瀏覽量

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

    關(guān)注

    57

    文章

    2392

    瀏覽量

    43055
收藏 人收藏

    評論

    相關(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)開放的機型名單

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

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

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

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

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

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

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

    鴻蒙開發(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 ?746次閱讀
    <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 ?415次閱讀
    <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中默認生成onCreate()和onDestroy()方法,其他方法需要開發(fā)者自行實現(xiàn)。
    的頭像 發(fā)表于 06-18 09:36 ?296次閱讀
    <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 ?330次閱讀
    <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 ?359次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:停止<b class='flag-5'>PageAbility</b>

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

    PageAbility啟動模式設(shè)置為單例時(具體設(shè)置方法和典型場景示例見[PageAbility啟動模式],缺省情況下是單實例模式),若Pag
    的頭像 發(fā)表于 06-19 09:29 ?469次閱讀
    <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 ?508次閱讀
    <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 ?420次閱讀
    <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 ?396次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>Ability Kit程序框架服務(wù):<b class='flag-5'>PageAbility</b>切換 組件切換
    百家乐官网娱乐网官网网| 太阳城娱乐网sss977| 余江县| 百家乐官网硬币打法| 百家乐赢家球讯网| 永利国际| 百家乐洗码| 皇冠网小说推荐| 真人百家乐出千| 德晋百家乐的玩法技巧和规则| 百家乐官网棋牌公式| 网络百家乐大转轮| 百家乐官网公试打法| 百家乐技巧-百家乐开户指定代理网址| 衡南县| 澳门百家乐实战| 百家乐官网开户博彩论坛| 玩百家乐有几种公式| 网上百家乐官网洗码技巧| 百家乐免费改单| 电投百家乐官网网站| 大发888是真的吗| 百家乐官网号解码器| 大发888赌场是干什么的| 属虎属龙做生意| 民乐县| 澳门百家乐如何算| 网上百家乐官网是假| 大发888游戏平台888| 24山度数| 东安县| 联合百家乐的玩法技巧和规则 | 和田县| 百家乐单机游戏下| 百家乐官网路子| 澳门博彩公司| 爱婴百家乐官网的玩法技巧和规则| 菲律宾太阳网| 678百家乐博彩赌场娱乐网规则| 百家乐官网网站赌钱吗| 太阳城开户网|