色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

鴻蒙開發:應用組件跨設備交互(流轉)【跨端遷移】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-11 17:10 ? 次閱讀

跨端遷移

概述

在用戶使用設備的過程中,當使用情境發生變化時(例如從室內走到戶外或者周圍有更適合的設備等),之前使用的設備可能已經不適合繼續當前的任務,此時,用戶可以選擇新的設備來繼續當前的任務,原設備可按需決定是否退出任務,這個就是跨端遷移的場景。常見的跨端遷移場景實例:在平板上播放的視頻,遷移到智慧屏繼續播放,從而獲得更佳的觀看體驗;平板上的視頻應用退出。在應用開發層面,跨端遷移指在A端運行的UIAbility遷移到B端上,完成遷移后,B端UIAbility繼續任務,而A端UIAbility可按需決定是否退出。

跨端遷移的核心任務是將應用的當前狀態(包括頁面控件、狀態變量等)無縫遷移到另一設備,從而在新設備上無縫接續應用體驗。這意味著用戶在一臺設備上進行的操作可以在另一臺設備的相同應用中快速切換并無縫銜接。

主要功能包括:

  • 支持用戶自定義數據存儲及恢復。
  • 支持頁面路由信息和頁面控件狀態數據的存儲及恢復。
  • 支持應用兼容性檢測
  • 支持應用根據實際使用場景動態設置遷移狀態(默認遷移狀態為 ACTIVE 激活狀態)。例如,編輯類應用在編輯文本的頁面下才需要遷移,其他頁面不需要遷移,則可以通過[setMissionContinueState]進行控制。
  • 支持應用動態選擇是否進行頁面棧恢復(默認進行頁面棧信息恢復)。例如,應用希望自定義遷移到其他設備后顯示的頁面,則可以通過[SUPPORT_CONTINUE_PAGE_STACK_KEY]進行控制。
  • 支持應用動態選擇遷移成功后是否退出遷移源端應用(默認遷移成功后退出遷移源端應用)。可以通過[SUPPORT_CONTINUE_SOURCE_EXIT_KEY]進行控制。

    說明:

    開發者可以開發具有遷移能力的應用,遷移的觸發由系統應用完成。

運作機制

hop-cross-device-migration

  1. 在源端,通過UIAbility的[onContinue()]回調,開發者可以保存待接續的業務數據。例如,在瀏覽器應用中完成跨端遷移,開發者需要使用[onContinue()]回調保存頁面URL等業務內容,而系統將自動保存頁面狀態,如當前瀏覽進度。
  2. 分布式框架提供了跨設備應用界面、頁面棧以及業務數據的保存和恢復機制,它負責將數據從源端發送到對端。
  3. 在對端,同一UIAbility可以通過[onCreate()](冷啟動)和[onNewWant()](熱啟動)接口來恢復業務數據。

跨端遷移流程

以從對端的遷移入口發起遷移為例,跨端遷移流程如下圖所示。

hop-cross-device-migration

約束限制

  • 跨端遷移要求在同一UIAbility之間進行,也就是需要相同的bundleNameabilityName和簽名信息。
  • 為了獲得最佳體驗,使用wantParam傳輸的數據需要控制在100KB以下。

開發步驟

  1. 在[module.json5配置文件]的abilities標簽中配置跨端遷移標簽continuable

    {
      "module": {
        // ...
        "abilities": [
          {
            // ...
            "continuable": true, // 配置UIAbility支持遷移
          }
        ]
      }
    }
    

    說明:

    根據需要配置應用啟動模式類型,配置詳情請參照[UIAbility組件啟動模式]。

  2. 在源端UIAbility中實現[onContinue()]回調。
    UIAbility實例觸發遷移時,[onContinue()]回調在源端被調用,開發者可以在該接口中通過同步或異步的方式來保存遷移數據,實現應用兼容性檢測,決定是否支持此次遷移。

    • 保存遷移數據:開發者可以將要遷移的數據通過鍵值對的方式保存在wantParam參數中。
    • 應用兼容性檢測:開發者可以通過從wantParam參數中獲取對端應用的版本號與源端應用版本號做兼容性校驗。開發者可以在觸發遷移時從[onContinue()]回調中wantParam.version獲取到遷移對端應用的版本號與遷移源端應用版本號做兼容校驗。
    • 遷移決策:開發者可以通過[onContinue()]回調的返回值決定是否支持此次遷移,接口返回值詳見[AbilityConstant.OnContinueResult]。
    import AbilityConstant from '@ohos.app.ability.AbilityConstant';
    import hilog from '@ohos.hilog';
    import UIAbility from '@ohos.app.ability.UIAbility';
    
    const TAG: string = '[MigrationAbility]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    export default class MigrationAbility extends UIAbility {
      onContinue(wantParam: Record< string, Object >):AbilityConstant.OnContinueResult {
        let version = wantParam.version;
        let targetDevice = wantParam.targetDevice;
        hilog.info(DOMAIN_NUMBER, TAG, `onContinue version = ${version}, targetDevice: ${targetDevice}`); // 準備遷移數據
    
        // 獲取源端版本號
        let versionSrc: number = -1; // 請填充具體獲取版本號的代碼
    
        // 兼容性校驗
        if (version !== versionSrc) {
          // 在兼容性校驗不通過時返回MISMATCH
          return AbilityConstant.OnContinueResult.MISMATCH;
        }
    
        // 將要遷移的數據保存在wantParam的自定義字段(例如data)中
        const continueInput = '遷移的數據';
        wantParam['data'] = continueInput;
    
        return AbilityConstant.OnContinueResult.AGREE;
      }
    }
    
  3. 源端設備UIAbility實例在冷啟動和熱啟動情況下分別會調用不同的接口來恢復數據和加載UI。 在對端設備的UIAbility中,需要實現[onCreate()]/[onNewWant()]接口來恢復遷移數據。不同情況下的函數調用如下圖所示:
    hop-cross-device-migration

    • 通過在[onCreate()]/[onNewWant()]回調中檢查launchReason,可以判斷此次啟動是否有遷移觸發。
    • 開發者可以從want中獲取之前保存的遷移數據
    • 數據恢復后調用restoreWindowStage()來觸發 頁面恢復 ,包括頁面棧信息。
    import AbilityConstant from '@ohos.app.ability.AbilityConstant';
    import hilog from '@ohos.hilog';
    import UIAbility from '@ohos.app.ability.UIAbility';
    import type Want from '@ohos.app.ability.Want';
    
    const TAG: string = '[MigrationAbility]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    export default class MigrationAbility extends UIAbility {
      storage : LocalStorage = new LocalStorage();
    
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'Ability onCreate');
        if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
          // 將上述保存的數據從want.parameters中取出恢復
          let continueInput = '';
          if (want.parameters !== undefined) {
            continueInput = JSON.stringify(want.parameters.data);
            hilog.info(DOMAIN_NUMBER, TAG, `continue input ${JSON.stringify(continueInput)}`);
          }
          // 觸發頁面恢復
          this.context.restoreWindowStage(this.storage);
        }
      }
    
      onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
         hilog.info(DOMAIN_NUMBER, TAG, 'onNewWant');
         if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
           // 將上述保存的數據從want.parameters中取出恢復
           let continueInput = '';
           if (want.parameters !== undefined) {
             continueInput = JSON.stringify(want.parameters.data);
             hilog.info(DOMAIN_NUMBER, TAG, `continue input ${JSON.stringify(continueInput)}`);
           }
           // 觸發頁面恢復
           this.context.restoreWindowStage(this.storage);
         }
       }
    }
    

可選配置遷移能力

動態配置遷移能力

從API version 10開始,提供了支持動態配置遷移能力的功能。即應用可以根據實際使用場景,在需要遷移時開啟應用遷移能力;在業務不需要遷移時則可以關閉遷移能力。

開發者可以通過調用[setMissionContinueState()]接口對遷移能力進行設置。默認狀態下,應用的遷移能力為ACTIVE狀態,即遷移能力開啟,可以遷移。

設置遷移能力的時機

遷移能力的改變可以根據實際業務需求和代碼實現,發生在應用生命周期的絕大多數時機。本文介紹常用的幾種配置方式。

UIAbility的[onCreate()]回調中調用接口,可以在應用創建時設置應用的遷移狀態。

// MigrationAbility.ets
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import hilog from '@ohos.hilog';
import UIAbility from '@ohos.app.ability.UIAbility';
import type Want from '@ohos.app.ability.Want';

const TAG: string = '[MigrationAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

export default class MigrationAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // ...
    this.context.setMissionContinueState(AbilityConstant.ContinueState.INACTIVE, (result) = > {
      hilog.info(DOMAIN_NUMBER, TAG, `setMissionContinueState INACTIVE result: ${JSON.stringify(result)}`);
    });
    // ...
  }
}

在頁面的onPageShow()回調中調用接口,可以設置單個頁面出現時應用的遷移狀態。

// Page_MigrationAbilityFirst.ets
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import common from '@ohos.app.ability.common';
import hilog from '@ohos.hilog';

const TAG: string = '[MigrationAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

@Entry
@Component
struct Page_MigrationAbilityFirst {
  private context = getContext(this) as common.UIAbilityContext;
  build() {
    // ...
  }
  // ...
  onPageShow(){
    // 進入該頁面時,將應用設置為可遷移狀態
    this.context.setMissionContinueState(AbilityConstant.ContinueState.ACTIVE, (result) = > {
      hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', `setMissionContinueState ACTIVE result: ${JSON.stringify(result)}`);
    });
  }
}

在某個組件的觸發事件中設置應用遷移能力。

// Page_MigrationAbilityFirst.ets
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import common from '@ohos.app.ability.common';
import hilog from '@ohos.hilog';
import promptAction from '@ohos.promptAction'
import router from '@ohos.router';

const TAG: string = '[MigrationAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

@Entry
@Component
struct Page_MigrationAbilityFirst {
  private context = getContext(this) as common.UIAbilityContext;
  build() {
    Column() {
      //...
      List({ initialIndex: 0 }) {
        ListItem() {
          Row() {
            //...
          }
          .onClick(() = > {
            // 點擊該按鈕時,將應用設置為可遷移狀態
            this.context.setMissionContinueState(AbilityConstant.ContinueState.ACTIVE, (result) = > {
              hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', `setMissionContinueState ACTIVE result: ${JSON.stringify(result)}`);
              promptAction.showToast({
                message: $r('app.string.Success')
              });
            });
          })
        }
        //...
      }
      //...
    }
    //...
  }
}

保證遷移連續性

由于遷移加載時,對端拉起的應用可能執行過自己的遷移狀態設置命令(例如,冷啟動時對端在[onCreate()]中設置了 INACTIVE ;熱啟動時對端已打開了不可遷移的頁面,遷移狀態為 INACTIVE 等情況)。為了保證遷移過后的應用依然具有可以遷移回源端的能力,應在 [onCreate()]/[onNewWant()]的遷移調用判斷中,將遷移狀態設置為 ACTIVE

// MigrationAbility.ets
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import type Want from '@ohos.app.ability.Want';

const TAG: string = '[MigrationAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

export default class MigrationAbility extends UIAbility {
  // ...
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // ...
    if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
      // ...
    }
    // 調用原因為遷移時,設置狀態為可遷移,應對冷啟動情況
    this.context.setMissionContinueState(AbilityConstant.ContinueState.ACTIVE, (result) = > {
      hilog.info(DOMAIN_NUMBER, TAG, `setMissionContinueState ACTIVE result: ${JSON.stringify(result)}`);
    });
  }

  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // ...
    // 調用原因為遷移時,設置狀態為可遷移,應對熱啟動情況
    if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
      this.context.setMissionContinueState(AbilityConstant.ContinueState.ACTIVE, (result) = > {
        hilog.info(DOMAIN_NUMBER, TAG, `setMissionContinueState ACTIVE result: ${JSON.stringify(result)}`);
      });
    }
  }
  // ...
}

按需遷移頁面棧

支持應用動態選擇是否進行頁面棧恢復(默認進行頁面棧信息恢復)。如果應用不想使用系統默認恢復的頁面棧,則可以設置不進行頁面棧遷移,而需要在onWindowStageRestore()設置遷移后進入的頁面,參數定義見[SUPPORT_CONTINUE_PAGE_STACK_KEY]。

應用在源端的頁面棧中存在Index和Second路由,而在對端恢復時不需要按照源端頁面棧進行恢復,需要恢復到指定頁面。

例如,UIAbility遷移不需要自動遷移頁面棧信息。

// MigrationAbility.ets
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import UIAbility from '@ohos.app.ability.UIAbility';
import wantConstant from '@ohos.app.ability.wantConstant';
import hilog from '@ohos.hilog';
import type window from '@ohos.window';

const TAG: string = '[MigrationAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

export default class MigrationAbility extends UIAbility {
  // ...
  onContinue(wantParam: Record< string, Object >):AbilityConstant.OnContinueResult {
    hilog.info(DOMAIN_NUMBER, TAG, `onContinue version = ${wantParam.version}, targetDevice: ${wantParam.targetDevice}`);
    wantParam[wantConstant.Params.SUPPORT_CONTINUE_PAGE_STACK_KEY] = false;
    return AbilityConstant.OnContinueResult.AGREE;
  }

  onWindowStageRestore(windowStage: window.WindowStage) : void {
    // 若不需要自動遷移頁面棧信息,則需要在此處設置應用遷移后進入的頁面
    windowStage.loadContent('pages/page_migrationability/Page_MigrationAbilityThird', (err, data) = > {
      if (err.code) {
        hilog.error(DOMAIN_NUMBER, TAG, 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
    });
  }
}

按需退出

支持應用動態選擇遷移成功后是否退出遷移源端應用(默認遷移成功后退出遷移源端應用)。如果應用不想讓系統自動退出遷移源端應用,則可以設置不退出,參數定義見[SUPPORT_CONTINUE_SOURCE_EXIT_KEY]。

示例:UIAbility設置遷移成功后,源端不需要退出遷移應用。

import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import UIAbility from '@ohos.app.ability.UIAbility';
import wantConstant from '@ohos.app.ability.wantConstant';
import hilog from '@ohos.hilog';

const TAG: string = '[MigrationAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

export default class MigrationAbility extends UIAbility {
  // ...
  onContinue(wantParam: Record< string, Object >):AbilityConstant.OnContinueResult {
    hilog.info(DOMAIN_NUMBER, TAG, `onContinue version = ${wantParam.version}, targetDevice: ${wantParam.targetDevice}`);
    wantParam[wantConstant.Params.SUPPORT_CONTINUE_SOURCE_EXIT_KEY] = false;
    return AbilityConstant.OnContinueResult.AGREE;
  }
}

跨端遷移中的數據遷移

當前推薦兩種不同的數據遷移方式,開發者可以根據實際使用需要進行選擇。

說明:

部分ArkUI組件支持通過配置restoreId的方式,在遷移后將特定狀態恢復到對端設備。
如果涉及分布式對象遷移時應注意:

  1. 需要申請ohos.permission.DISTRIBUTED_DATASYNC權限。
  2. 同時需要在應用首次啟動時彈窗向用戶申請授權。

使用wantParam遷移數據

在需要遷移的數據較少(100KB以下)時,開發者可以選擇在wantParam中增加字段進行數據遷移。示例如下:

import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import UIAbility from '@ohos.app.ability.UIAbility';
import type Want from '@ohos.app.ability.Want';
const TAG: string = '[MigrationAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

export default class MigrationAbility extends UIAbility {
  // 源端保存
  onContinue(wantParam: Record< string, Object >):AbilityConstant.OnContinueResult {
    // 將要遷移的數據保存在wantParam的自定義字段(例如data)中
    const continueInput = '遷移的數據';
    wantParam['data'] = continueInput;
    return AbilityConstant.OnContinueResult.AGREE;
  }

  // 對端恢復
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    if (launchParam.launchReason === AbilityConstant.LaunchReason.CONTINUATION) {
      // 將上述保存的數據取出恢復
      let continueInput = '';
      if (want.parameters !== undefined) {
        continueInput = JSON.stringify(want.parameters.data);
        hilog.info(DOMAIN_NUMBER, TAG, `continue input ${continueInput}`);
      }
      // 觸發頁面恢復
      this.context.restoreWindowStage(this.storage);
    }
  }

  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    if (launchParam.launchReason == AbilityConstant.LaunchReason.CONTINUATION) {
      let continueInput = '';
      if (want.parameters !== undefined) {
        continueInput = JSON.stringify(want.parameters.data);
        hilog.info(DOMAIN_NUMBER, TAG, `continue input ${JSON.stringify(continueInput)}`);
      }
      // 觸發頁面恢復
      this.context.restoreWindowStage(this.storage);
    }
  }
}

使用分布式對象遷移數據

當需要遷移的數據較大(100KB以上)或數據以文件形式存在時,可以選擇[分布式對象]進行數據遷移。其中,對于文件的遷移,可以使用分布式對象提供的[資產]遷移方式進行。

  1. 在源端onContinue()接口中創建一個分布式數據對象[DataObject],將所要遷移的數據填充到分布式對象數據中,并將生成的sessionId通過want傳遞到對端。
  2. 對端在onCreate()/onNewWant中進行數據恢復時,可以從want中讀取該sessionId,通過分布式對象恢復數據。

說明: 自API 12起,為了保證更高的成功率,文件數據的遷移不建議繼續通過[跨設備文件訪問]實現,推薦使用分布式對象攜帶資產的方式進行。開發者此前通過跨設備文件訪問實現的文件遷移依然可以使用。

驗證指導

為方便開發者驗證已開發的可遷移應用,系統提供了一個全局任務中心demo作為遷移的入口。下面介紹通過安裝全局任務中心來驗證遷移的方式。

1. 編譯安裝全局任務中心

配置環境

public-SDK不支持開發者使用所有的系統API,例如:全局任務中心使用的[ @ohos.distributedDeviceManager ]不包括在public_SDK中。因此為了正確編譯安裝全局任務中心,開發者需要替換full-SDK,具體操作可參見[替換指南]。

說明

本文中的截圖僅為參考,具體的顯示界面請以實際使用的DevEco Studio和SDK的版本為準。

下載MissionCenter_Demo[示例代碼]

編譯工程文件

?a.新建一個工程,找到對應的文件夾替換下載文件

hop-cross-device-migration

?b.自動簽名,編譯安裝。

?DevEco的自動簽名模板默認簽名權限為normal級。而本應用設計到ohos.permission.MANAGE_MISSIONS權限為system_core級別。自動生成的簽名無法獲得足夠的權限,所以需要將權限升級為system_core級別,然后簽名。

?c.系統權限設置(以api10目錄為例): 將Sdk目錄下的openharmonyapi版本(如:10)toolchainslibUnsignedReleasedProfileTemplate.json文件中的"apl":"normal"改為"apl":"system_core"。

  1. 點擊file->Project Structure。
    hop-cross-device-migration
  2. 點擊Signing Configs 點擊OK。
    hop-cross-device-migration
  3. 連接開發板運行生成demo。

2. 設備組網

  1. 打開A,B兩設備的計算器。
  2. 點擊右上角箭頭選擇B設備。
  3. 在B設備選擇信任設備,彈出PIN碼。
  4. 在A設備輸入PIN碼。
  5. 已組網成功,驗證方法:在A設備輸入數字,B設備同步出現則證明組網成功。

3. 發起遷移

  1. 在B設備打開多設備協同權限的應用,A設備打開全局任務中心demo,A設備出現A設備名稱(即:本機:OpenHarmony 3.2)和B設備名稱(OpenHarmony 3.2)。
    hop-cross-device-migration

  2. 點擊B設備名稱,然后出現B設備的應用。
    hop-cross-device-migration

  3. 最后將應用拖拽到A設備名稱處,A設備應用被拉起,B設備應用退出。
    hop-cross-device-migration.

    審核編輯 黃宇

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

    關注

    1

    文章

    512

    瀏覽量

    17813
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1035

    瀏覽量

    45899
  • 鴻蒙
    +關注

    關注

    57

    文章

    2339

    瀏覽量

    42805
收藏 人收藏

    評論

    相關推薦

    鴻蒙OS 設備遷移

    設備遷移(下文簡稱“遷移”)支持將 Page 在同一用戶的不同設備遷移,以便支持用戶無縫切換
    的頭像 發表于 01-31 15:47 ?1131次閱讀

    如何理解鴻蒙OS是設備的?

    誰能幫忙解釋鴻蒙OS是怎樣實現平臺的?
    發表于 09-08 18:17

    #2020征文-手機#【鴻蒙基地】鴻蒙設備啟動窗口:Page Ability

    中輸入一些內容,最后點擊“設備遷移Page Ability”按鈕,會彈出一個設備列表窗口,選擇相應的設備后,會在選中的
    發表于 12-31 11:56

    #2020征文-手機#【鴻蒙基地】鴻蒙設備啟動窗口:Page Ability

    中輸入一些內容,最后點擊“設備遷移Page Ability”按鈕,會彈出一個設備列表窗口,選擇相應的設備后,會在選中的
    發表于 01-25 14:13

    HarmonyOS分布式——設備遷移

    HarmonyOS分布式——設備遷移
    發表于 06-26 14:34

    HarmonyOS應用框架如何解決多設備交互問題?

    應用框架中提供了兩種基礎功能,分別是:多端協同與遷移。接下來我們將介紹HarmonyOS的上述兩個能力是如何解決多設備交互問題的。二、H
    發表于 08-12 11:03

    新能力讓數據多端協同更便捷,數據遷移更高效!

    者完成消息處理邏輯,包括:建立通信鏈接、消息收發處理、錯誤處理和性能調優等,工作量非常大。此外,設備越多,調試復雜度將呈指數增長。挑戰2:如何更高效地實現數據的“遷移”?手機和智慧
    發表于 01-11 10:41

    DevEco Studio 2.1平臺設備交互使用示例

    DevEco Studio 2.1新增開發者使用的平臺設備交互界面(超級用戶可以使用該設備
    發表于 03-31 15:02

    鴻蒙流轉遷移失敗是什么原因?是否跟機型有關?

    服務成功,選擇設備成功,最后遷移失敗,測了下啟動遠程FA也不行。private void startRemoteFA() {if (mDeviceInfo != null
    發表于 06-17 09:58

    HarmonyOS應用開發-DiseributedVideoCodelab設備視頻遷移

    說明:此Demo用于設備遷移視頻內容。您可以方便地跨設備遷移視頻內容,然后在源設備遠程控制、操
    發表于 07-05 10:24

    如何利用設備開發設備

    為用戶提供多個設備的最佳體驗。 Luke Wroblewski著眼于如何利用設備開發的場景.
    的頭像 發表于 11-15 06:40 ?2612次閱讀

    華為發布HarmonyOS2,全新桌面支持應用設備流轉

    華為正式發布了HarmonyOS 2,鴻蒙系統新亮點先知道,不僅有全新桌面,還支持應用設備流轉,新奇玩法你值得期待。
    的頭像 發表于 06-02 20:43 ?1.1w次閱讀

    什么是HarmonyOS“設備遷移”?

    什么是HarmonyOS“設備遷移”? HarmonyOS“設備遷移”是指將承載業務的Pag
    的頭像 發表于 06-25 17:32 ?5335次閱讀

    HarmonyOS中如何進行遷移

    ?? 流轉在 HarmonyOS 中泛指多設備分布式操作,也是 HarmonyOS 的亮點之一。 ???? 流轉按體驗可以分為
    的頭像 發表于 11-15 09:38 ?2426次閱讀

    鴻蒙開發:應用組件設備交互流轉)【多端協同】

    由于“多端協同任務管理”能力尚未具備,開發者當前只能通過開發系統應用獲取設備列表,不支持三方應用接入。
    的頭像 發表于 06-13 10:42 ?777次閱讀
    <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><b class='flag-5'>交互</b>(<b class='flag-5'>流轉</b>)【多端協同】
    主站蜘蛛池模板: 视频一区二区中文字幕| 纯肉高H种马艳遇风流多| 亚洲精品成A人在线观看| 肉动漫h黄动漫日本免费观看 | 在线天天看片免费视频观看| 午夜福利免费院| 无罩看奶禁18| 无码欧美喷潮福利XXXX| 天天噜日日噜夜夜噜| 色欲AV蜜臀AV在线观看麻豆| 日日碰狠狠躁久久躁综合网| 日本wwwxx爽69护士| 日本特黄的免费大片视频| 人妻中文字幕乱人伦在线| 日本aa大片| 失禁 调教 刺激 哭喊男男| 色偷偷7777www| 无套内谢大学生A片| 亚洲AV蜜桃永久无码精品无码网| 校草让我脱了内裤给全班看| 性生大片免费看| 亚洲欧美中文字幕网站大全| 极品虎白在线观看| 狠日狠干日曰射| 九色PORNY蝌蚪视频首页| 久久综合九色综合国产| 美女全光末满18勿进| 欧美成人无码视频午夜福利| 日本女人水多| 先锋资源久久| 亚洲视频一| 9420高清完整版在线电影免费观看| 色偷偷网站| 亚洲第一国产| 中文字幕 亚洲 有码 在线| 91精品婷婷国产综合久久8| vivoe另类| 国产午夜精品久久理论片小说| 精品国产在线观看福利| 麻豆精品传媒卡一卡二传媒短视频| 欧美高清一区二区三|