云网牛站
所在位置:首页 > HarmonyOS问题与回答 > 实现基于当前Android业务的简单的Harmony多设备协同方案

实现基于当前Android业务的简单的Harmony多设备协同方案

2021-06-29 09:19:42作者:huawei人稿源:HarmonyOS站

问题:有没有实现基于当前Android业务的简单的Harmony多设备协同方案?目前现有业务已安全运行多年,但又想搭上鸿蒙系统跨平台的快车,怎么能在最少开销下,给当前业务加上鸿蒙跨平台快车呢?

 

回答:

由于鸿蒙生态尚不健全,很多功能没法深入研究,只能通过现有的Android开发经验,去构想鸿蒙开发可行性。

背景知识:

1、Android可以通过路由方式唤起应用

2、鸿蒙跨设备数据系统

简单的方案如下图所示:

实现基于当前Android业务的简单的Harmony多设备协同方案

第一步:现有的Android客户端通过Intent唤起鸿蒙桥应用

Intent intent = getPackageManager().getLaunchIntentForPackage("鸿蒙桥包名");

intent.putExtra("key", "value");

if(intent != null){

  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  startActivity(intent);

}

第二步:鸿蒙桥获取可以连接的设备

DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);

用户选择需要连接设备。

第三步:通过鸿蒙桥进行数据协同

Intent intent = new Intent();

intent.setParam("key", "value");

Operation operation = new Intent.OperationBuilder()

                        .withDeviceId(targetDevice.getDeviceId())

                        .withBundleName(getBundleName())

                        .withAbilityName(CommonConstantData.ABILITY_MAIN)

                        .withAction("action")

                        .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)

                        .build();

intent.setOperation(operation);

try {

      //检查远端对象是否有对应的Ability

      List<AbilityInfo> abilityInfos = getBundleManager().queryAbilityByIntent(intent, 0, 0);

      if(abilityInfos != null && !abilityInfos.isEmpty()){

            startAbility(intent);

      }

    } catch (Exception e) {

        e.printStackTrace();

}

第四步:鸿蒙桥传递数据到Android客户端

Intent intent = new Intent();

intent.setParam("key", "value");

Operation operation = new Intent.OperationBuilder()

                        .withUri(Uri.parse("Dest Page Router Path"))

                        .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)

                        .build();

intent.setOperation(operation);

startAbility(intent);

至此,就可以实现现有Android应用的把数据同步到另一台设备。

 

说明:

整个流程是可行的。但需要,这个方案不是基于鸿蒙的Ability能力迁移,二是对Android数据进行鸿蒙跨平台能力加持,相当于加了buff,Android应用本质没有改变。同时需要注意以下问题:

1、改方案需要用户安装额外的桥应用,用户存在抵触风险。

如果用户不选择安装鸿蒙桥,就白搭了。

私下觉得这个桥实现起来非常简单,如果鸿蒙系统将来能够提供标准接口,将极大降低Android客户端移植复杂度,提升用户体验。

2、本地数据通过Intent传递数据有限制

Android系统对Intent传递数据量有限制。所以如果是本地数据(多媒体等大文件)进行跨设备迁移,存在风险。目前不确定鸿蒙系统对于跨设备传递的文件大小是否有限制。

对于这种情况,不缺钱的情况下,可以先把数据传到云端。通过鸿蒙桥只进行简单数据传递。

3、Android应用和鸿蒙桥分开审核

如果有修改,两个客户端都需要发布。任何一个端审核不通过,另一个端发布更新。会存在新老版本不兼容的问题。所以在开发时,鸿蒙桥一定要健壮,尽量做到原子化。

上面是对现有Android应用实现在鸿蒙系统跨设备方案的一种简单探索,肯定会有更好的。

相关参考:有没有办法把现有Android的Apk包转换成HarmonyOS的Hap包

精选文章
热门文章