更多信息请访问:OpenHarmony技术社区https://ost.51cto.com目标是基于OpenHarmony提供的分布式能力,实现拉起远程设备的能力在同一网络上。本节主要分享分布式中最基本的能力,分布式拉取的实现。效果环境系统版本:OpenHarmony3.1releaseSDK:OpenHarmonyAPI8设备:Hi3516IDE:DevEcoStudio3.0Beta3PC:win1064前提条件1.在Hi3616开发板上烧写OpenHarmony3.1release系统。2、准备两块Hi3516DV300开发板A和B,烧写同一个版本系统。3、两块开发板A和B配置在同一个WiFi网络下。打开设置-->WLAN-->点击右侧的WiFi开关-->点击目标WiFi,输入密钥。分布式实现以下内容为本地学习整理的资料。如有不妥之处,请留言指正,谢谢。流程图流程说明1.用户授权。分布式远程FA需要申请敏感权限:ohos.permission.DISTRIBUTED_DATASYNC,用户授权成功后才能使用。2、通过deviceManager.createDeviceManager()创建设备管理对象实例DeviceManager。3、同步获取所有信任设备列表:deviceManager.getTrustedDeviceListSync()。4.启动设备发现:deviceManager.startDeviceDiscovery()。5.注册监听器:deviceManager.on()。deviceStateChange:设备状态发生变化,如上线、下线、完成状态同步等。deviceFound:发现设备。discoverFail:发现设备失败。serviceDie:服务已停止。6、设备认证:deviceManager.authenticateDevice(),两台设备互联需要先建立认证,两台设备认证为可信设备,可以进行一些分布式操作。7.启动远程FA,featureAbility.startAbility(),其中featureAbility为@ohos.ability.featureAbility。核心代码分析分布式权限声明说明:需要申请的权限可以在config.json的module模块中声明。module{"reqPermissions":[{"name":"ohos.permission.DISTRIBUTED_DATASYNC"}]}权限申请说明:敏感权限需要用户授权后才能访问。在这种情况下,需要在应用启动的时候申请,所以在index.js的onInit()方法中申请。接口说明AbilityContext.requestPermissionsFromUser(permissions:Array,requestCallback:AsyncCallback):void;参数说明参数:PermissionRequestResult。描述:权限请求结果。备注:该模块首批接口从API9开始支持,后续版本新增接口,初始版本接口以上标标注。实施grantPermission(){letcontext=featureAbility.getContext();context.requestPermissionsFromUser(REQUEST_PERMISSION_LIST,REQUEST_PERMISSION_CODE,function(result){console.log('requestPermissionsFromUserResult:'+JSON.stringify(result));//todo判断是否授权}}获取DeviceManager实例:注意:必须获取设备实例才能操作device=,ohos.distributedHardware.deviceManager提供了创建方法:createDeviceManager(bundleName:string,callback:AsyncCallback):void。备注:DeviceManagerAPI参数说明implementsregisterDeviceListCallback(callback){if(typeof(this.#deviceManager)==='undefined'){//获取设备管理对象letself=this;deviceManager.createDeviceManager('com.nlas.myapplication',(error,value)=>{if(error){console.error('createDeviceManagerfailed.');return;}self.#deviceManager=value;//设备管理器objectinstance//executeOperation...})}else{//设备管理器对象已经存在,可以直接执行操作...}}获取可信设备描述:同步获取所有可信设备列表设备deviceManager.getTrustedDeviceListSync():数组。参数说明实现//同步获取所有可信设备列表varlist=this.#deviceManager.getTrustedDeviceListSync();console.info('[RemoteDeviceModel]deviceList='+JSON.stringify(list));开始发现设备接口:deviceManager.startDeviceDiscovery(subscribeInfo:SubscribeInfo):void。接口描述参数:SubscribeInfo。实现//随机数SUBSCRIBE_ID=Math.floor(65536*Math.random());varinfo={subscribeId:SUBSCRIBE_ID,//服务订阅ID[0~65535],每个发现过程应该是唯一的mode:0xAA,//activemodemedium:2,//订阅medium2-wififreq:2,//订阅频率高isSameAccount:false,//只能找到相同账号的设备isWakeRemote:true,//发现休眠设备capability:0};console.info('[RemoteDeviceModel]startDeviceDiscovery'+SUBSCRIBE_ID);deviceManager.startDeviceDiscovery(info);//发现设备注册监听注册设备状态回调。关键字:deviceStateChange。接口:deviceManager.on(type:'deviceStateChange',callback:Callback<{action:DeviceStateChangeAction,device:DeviceInfo}>):void。参数说明参数:DeviceStateChangeAction。说明:表示设备状态变化的枚举。参数:设备信息。描述:设备信息。参数:设备类型。说明:代表设备类型的枚举类。现实deviceManager.on(DEVICE_STATE_CHANGE,(data)=>{console.info('[RemoteDeviceModel]deviceStateChangedata='+JSON.stringify(data));if(data==null){return;}switch(data.action){case0:{self.deviceList[self.deviceList.length]=data.device;console.info('[RemoteDeviceModel]online,updateddevicelist='+JSON.stringify(self.deviceList));self.callback();if(self.authCallback!=null){self.authCallback();self.authCallback=null;}break;}案例1:{if(self.deviceList.length>0){for(vari=0;i0){变量列表=[];对于(vari=0;i):void。参数描述实现deviceManager.on(DEVICE_FOUND,(data)=>{console.info('[RemoteDeviceModel]deviceFounddata='+JSON.stringify(data));if(data==null){return;}constcount=self.discoverList.length;for(vari=0;i):void。实施deviceManager.off('deviceFound');设备认证描述:指定设备接口进行认证:deviceManager.authenticateDevice(deviceInfo:DeviceInfo,authParam:AuthParam,callback:AsyncCallback<{deviceId:string,pinTone?:number}>):void。参数说明参数:AuthParam。实施authDevice(deviceId,callback){console.info('[RemoteDeviceModel]authDevice'+deviceId);for(vari=0;i{if(err){console.info('[RemoteDeviceModel]authenticateDevicefailed,err='+JSON.stringify(err));self.authCallback=null;}else{console.info('[RemoteDeviceModel]authenticateDevicesucceed,data='+JSON.stringify(data));self.authCallback=callback;}})}}}启动远程设备上的FA说明:通过@ohos.ability.featureAbility提供的startAbility()接口启动远程FA接口:featureAbility.startAbility(parameter:StartAbilityParameter):Promise。参数描述启动一个新能力(Promise形式)。参数:StartAbilityParameter。参数:想要。参数:标志说明。实施startAbilityContinuation(deviceId,deviceName){this.$element('continueAbilityDialog').close();console.info('featureAbility.startAbilitydeviceId='+deviceId+'deviceName='+deviceName);constwantValue={bundleName:'com.nlas.myapplication',abilityName:'com.nlas.myapplication.MainAbility',deviceId:deviceId};featureAbility.startAbility({want:wantValue}).then((data)=>{console.info('featureAbility.startAbilityfinished,'+JSON.stringify(data));});console.info('featureAbility.startAbilitywant='+JSON.stringify(wantValue));},至此,OpenHarmony分布式调度启动远程FA实现,介绍中如有错误请指正。完整代码:https://ost.51cto.com/resource/1883。更多信息请访问:OpenHarmony技术社区https://ost.51cto.com