自由流转--实例

一、自由流转的形态

        流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转,实现如邮件跨设备编辑、多设备协同健身、多屏游戏等分布式业务。 

        

二、跨端迁移

        在应用开发层面,跨端迁移指在A端运行的UIAbility迁移到B端上,完成迁移后,B端UIAbility继续任务,而A端UIAbility可按需决定是否退出。 

         

三、多端协同

        用户拥有的多个设备,可以作为一个整体,为用户提供比单设备更加高效、沉浸的体验,这就是多端协同场景。 

        

四、自由流转开发框架

        

        1、分布式软总线技术架构

         

        2、分布式软总线核心技术

        

        3、分布式数据管理

        解决跨端数据共享问题。

         

        

        4、分布式硬件

        解决跨端硬件共享问题。 

        

        5、分布式任务调度

        提供应用跨端迁移、多端协同能力。

         

        6、系统抽象和交互逻辑

         

        7、HarmonyOS提供的应用开发框架

        

五、自由流转应用开发

         1、跨端迁移运作机制简述

        

        1、为应用配置基础迁移功能

// src/main/resources/base/element/string.json
{
  "module": {
    // ...
    "abilities": [
      {
        "continuable": true,  // 配置迁移能力
        "launchType": "singleton"  // 指定启动模式(冷启动场景使用onCreate,热启动场景使用onNewWant)
      }
    ],
    "requestPermissions": [
      {
        // 增加权限配置,允许不同设备间的数据交换
        "name": "ohos.permission.DISTRIBUTED_DATASYNC",
        "reason": "$string:distributed_data_sync",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }
    ]
  }
}

        2、应用状态运行时申请用户授权

import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
  async checkPermissions(): Promise<void> {
    const permissions: Array<Permissions> = ["ohos.permission.DISTRIBUTED_DATASYNC"];
    const accessManager = abilityAccessCtrl.createAtManager();
    try {
      const bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
      const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleFlags);
      const grantStatus = await accessManager.checkAccessToken(bundleInfo.appInfo.accessTokenId, permissions[0]);  // 检查权限

      if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
        accessManager.requestPermissionsFromUser(this.context, permissions);  // 申请权限
      }
    } catch (err) {
      Logger.error('EntryAbility', 'checkPermissions', `Catch err: ${err}`);
      return;
    }
  }
}

        3、实现简单的接口

        源端:实现源端回调 

onContinue(wantParam: Record<string, Object | undefined>): AbilityConstant.OnContinueResult {
    ...
    return AbilityConstant.OnContinueResult.AGREE  // 同意迁移
}

        对端:实现对端回调

onCreate(want:Want, launchParam: AbilityConstant.LaunchParam): void {
    this.checkPermissions()
    if (launchParam.launchReason === AbilityConstant.LaunchParam.CONTINUATION) {
        this.context.restoreWindowStage(new LocalStorage));
    }
}

         4、分布式数据传输

        (1)页面数据

                a、使用ArkUI支持数据迁移的组件

                b、通过配置项设置进行页面栈迁移

        (2)业务数据

                a、少量应用状态(<100KB)通过wantParam传输

                b、内存数据通过分布式对象迁移

                c、文件数据通过分布式文件迁移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值