更多信息请访问:Harmonyos技术社区https://harmonyos.51cto.comAbilityInteraction设备迁移简介本示例演示了基本交互和Ability跨设备迁移。在A端随机生成一个数,计算这个数的平方值,然后把这个数传给B端,B端也计算结果。效果展示搭建环境,安装DevEcoStudio。具体请参考DevEcoStudio下载。搭建DevEcoStudio开发环境。DevEcoStudio开发环境依赖于网络环境。需要联网才能保证工具的正常使用。开发环境可根据以下两种情况进行配置:如果可以直接上网,只需要下载HarmonyOSSDK即可运行。如果网络不能直接访问Internet,则需要通过代理服务器访问。请参考配置开发环境。实现步骤1.config.json声明使用跨设备迁移的权限"reqPermissions":[{"name":"ohos.permission.DISTRIBUTED_DATASYNC"}]2.Ability实现IAbilityContinuation接口及相关方法publicclassFirstAbilityextendsAbilityimplementsIAbilityContinuation{...}3。能够申请用户授权敏感权限@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setMainRoute(FirstAbilitySlice.class.getName());requestPermission();}privatevoidrequestPermission(){if(verifySelfPermission(SystemPermission.DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){requestPermissionsFromUser(newString[]{SystemPermission.DISTRIBUTED_DATASYNC},0);}}4.Abity中的以下方法都返回true@OverridepublicbooleanonStartContinuation(){returntrue;}@OverridepublicbooleanonSaveData(IntentParamsintent){Paramsintent;}@OverridepublicbooleanonRestoreData(IntentParamsintentParams){returntrue;}@OverridepublicvoidonCompleteContinuation(inti){terminateAbility();}5.Slice实现了IAbilityContinuation接口及相关方法publicclassFirstAbilitySliceextendsAbilitySliceimplementsLifecycleStateObserver,IAbilityContinuation{...}6.切片按钮事件监听器(Text)findComponentById(ResourceTable.Id_number);lifecycleState=(Text)findComponentById(ResourceTable.Id_lifecycle_state);}7.Slice中设备迁移的方法privatevoidstartContinue(){try{continueAbility();}catch(IllegalStateException|UnsupportedOperationExceptione){LogUtil.error(TAG,"startContinueException");}}8.在Slice中实现以下方法,返回true@OverridepublicbooleanonStartContinuation(){returntrue;}@OverridepublicbooleanonSaveData(IntentParamsintentParams){//设备迁移后需要恢复数据intentParams.setParam(CONTINUE_PARAM_KEY_INPUT,inputNum);returntrue;}@OverridepublicbooleanonRestoreData(IntentParamsintentParams){//恢复数据Objectobject=intentParams.getParam(CONTINUE_PARAM_KEY_INPUT);if(objectinstanceofLong){inputNum=(long)object;}returntrue;}@OverridepublicvoidonCompleteContinuation(inti){//设备迁移完成,关闭Sliceterminate();}问题总结1.获取Slice中的bundleName:getBundleName()2.获取Slice中的Ability:getAbility()3.如果想监听Ability/Slice的生命周期变化,可以实现LifecycleStateObserver接口,实现onStateChanged方法publicclassFirstAbilitySliceextendsAbilitySliceimplementsLifecycleStateObserver{...}@OverridepublicvoidonStateChanged(Lifecycle.Eventevent){IntentlifecycleState.setText(lifecycleState.getText()+System.lineSeparator()+event.name());}4.Slice中启动另一个Ability的方法也可以使用setElementprivatevoidstartSecondAbility(){Intentintent=newIntent();intent.setElement(newElementName("",getBundleName(),SecondAbility.class.getName()));intent.setParam(Const.MESSAGE_KEY_SQUARED,inputNum);startAbilityForResult(intent,REQUEST_CODE_TO_ABILITY_B);}5.Slice在onAbilityResult方法中处理其他AbiltyReturnedresult/****@paramrequestCode发送的请求码,用于标识自己的请求*@paramresultCode收到的结果码,用于验证peer的结果*@paramresultData*/@OverrideprotectedvoidonAbilityResult(intrequestCode,intresultCode,IntentresultData)返回的数据{//使用switch逻辑语句判断switch(requestCode){//是发送的请求码byitselfcaseREQUEST_CODE_TO_ABILITY_B://是双方约定的resultcodeif(resultCode==Const.RESULT_CODE_FROM_ABILITY_B){//根据key获取指定类型的参数longoutputNum=resultData.getLongParam(Const.MESSAGE_KEY_SQUARED,0);numberText.setText(String.valueOf(outputNum));}break;default:break;}}文章相关附件可点击下方原链接下载AbilityInteraction.zip,更多内容请访问:鸿蒙与华为官方共建的技术社区https://harmonyos.51cto.com
