更多内容请访问:https://harmonyos.51cto.com/#zz,与华为官网共建的鸿蒙技术社区,大家好!!欢迎来到鸿蒙专区。我是冬雨很荣幸成为HarmonyOS系统课程的开发者。下面我就为大家介绍一下HarmonyOS应用迁移的实现。本文内容有视频版。我已经在相关内容中推出了我最新的免费视频教程《精讲鸿蒙应用程序开发》。欢迎大家观看并提出宝贵意见:https://edu.51cto.com/course/26138.html进入正题:1、什么是应用的协同流通?首先,什么是应用的流通和协同??应用流通与协同是鸿蒙OS分布式的重要体现。这里涉及到两个概念:协作:同时在多个设备上运行同一个应用程序。用户在多个设备的支持下执行相同的工作任务。流程:当某个应用程序正在某个设备上运行时,用户需要切换到另一个应用程序继续运行,同时停止在原设备上运行。流通包括迁移(Migrate)和搬迁两个层次。如果文本难以阅读,你可以看看下面的例子:如果我正在设备A上写一封电子邮件,但设备A的电池没电了,我可以将这个界面从设备A流式传输到设备B。在这一次,界面上我输入的邮件信息都没有丢失或更改。这个过程称为流转:流转包括迁移和搬迁两个层次。这个功能有点类似于苹果的应用中继,不是很新。不过鸿蒙的分布式特性还是有两个特别的优势:(1)苹果的应用中继开发非常繁琐。鸿蒙的循环非常简单易学。(2)苹果设备的中继难以实现协同功能。那么什么是协作?比如我用手机看新闻列表,用智慧屏浏览新闻。手机端和智慧屏上运行着同一个应用,如下图所示。请注意,这里是同一个应用程序。借助分布式软总线等关键技术,这一协同过程如丝般顺滑,开发非常简单。在这里,我将向您展示以下循环的基本开发方法。2应用流程的实现主要包括三个主要步骤:(1)权限配置(包括动态权限和静态权限)(2)在Ability和AbilitySlice中实现IAbilityContinuation接口。(3)调用ContinueAbility()方法实现转账。具体实现方法如下:首先,我们创建一个空的手机Java项目。模板是:EmptyFeatureAbility(Java)。下面我们修改一下UI界面,只显示一个【转账】按钮。如图布局代码如下:然后在config.json中配置静态权限。代码如下:{......"module":{......"reqPermissions":[{"name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"},{"name":"ohos.permission.DISTRIBUTED_DATASYNC"}],.....}在MainAbility.java中添加以下代码:publicclassMainAbilityextendsAbilityimplementsIAbilityContinuation{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setMainRoute(MainAbilitySlice.class.getName());requestPermission();}privatevoidrequestPermission(){String[]permission={"ohos.permission.DISTRIBUTED_DATASYNC","ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"};ListapplyPermissions=newArrayList<>();for(Stringelement:permission){if(verifySelfPermission(element)!=0){if(canRequestPermission(element)){applyPermissions.add(element);}else{}}else{}}requestPermissionsFromUser(applyPermissions.toArray(newString[0]),0);}@OverridepublicbooleanonStartContinuation(){returntrue;}@OverridepublicbooleanonSaveData(IntentParamsintentParams){returntrue;}@OverridepublicbooleanonRestoreData(IntentParamsintentParams){returntrue;}@OverridepublicvoidonCompleteContinuation(inti){}}这段代码包括两部分:(1)通过requestPermission()方法动态申请权限(2)实现IabilityContinuation接口,并覆盖它的四个主要方法。方法的内容可以为空,因为AbilitySlice承载了接口。在MainAbilitySlice.java中添加以下代码:publicclassMainAbilitySliceextendsAbilitySliceimplementsIAbilityContinuation{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);ButtonbtnContinue=(Button)findComponentById(ResourceTable.Id_setnueb.Id_setbtn);.ClickedListener(){@OverridepublicvoidonClick(Componentcomponent){continueAbility(getAvailableDeviceIds().get(0));}});}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}@OverridepublicbooleanonStartContinuation(){returntrue;}@OverridepublicbooleanonSaveData(IntentParamsintentParams){returntrue;}@OverridepublicbooleanonRestoreData(IntentParamsintentParams){returntrue;}@OverridepublicvoidonCompleteContinuation(inti){terminateAbility();}/***获得的所有已执行所有设备ID*@return设备ID列表*/publicstaticListgetAvailableDeviceIds(){//获取DeviceInfo列表,包含ListdeviceInfoList=DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);//如果DeviceInfo列表为空,则返回if(deviceInfoList==null||deviceInfoList.size()==0){returnnull;}//遍历DeviceInfo列表获取所有设备IDsListdeviceIds=newArrayList<>();for(DeviceInfodeviceInfo:deviceInfoList){deviceIds.add(deviceInfo.getDeviceId());}//返回所有设备IDsreturndeviceIds;}}这段代码包括主要有以下几个方面:(1)通过getAvailableDeviceIds()获取可以传输应用程序的设备ID列表(2)通过continueAbility()方法进行设备传输(3)在onSaveData()和onRestoreData()方法中可以传输数据在界面中流动。数据传输可以看我的视频教程,里面有详细的说明:https://edu.51cto.com/course/26138.html?hm(第5章第一讲)(4)onCompleteContinuation()方法中调用termiateAbility()方法结束原设备上的应用程序。最后,在两台搭载鸿蒙OS的手机上安装本程序,并在其中一台设备上打开应用:点击【继续】按钮,实现应用在两台设备间的传输。具体的演示可以看视频教程(第5章第1讲)!免费!https://edu.51cto.com/course/26138.html?hm不过这两个设备需要在同一个wifi下,用同一个华为账号登录,才可以使用分布式软总线进行传输。?版权归作者和HarmonyOS技术社区共同所有。如需转载请注明出处,否则追究责任。51cto.com/#zz