如何添加信任设备进行分布式操作?

功能场景描述及使用场景

手机创建一个设备管理实例,获取可信设备和本地设备的相关信息,然后扫描绑定其他手机,互为信任设备,进行分布式操作。

阅读 520
1 个回答

使用的核心API

deviceManager

核心代码解释

1.在module.json5文件中,添加如下权限配置

    "requestPermissions":[
      {
        "name": "ohos.permission.DISTRIBUTED_DATASYNC"
      }
    ],

核心代码如下:

import deviceManager from '@ohos.distributedDeviceManager';
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'
import { common } from '@kit.AbilityKit';
import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

@Entry
@Component
struct Index {
  @State message: string = '设备列表';
  @State myDeviceId: string = 'wait for data';
  @State flagA: boolean = true;
  @State flagB: boolean = false;
  dmInstance: deviceManager.DeviceManager | null = null

  onPageShow(): void {
    let checker = abilityAccessCtrl.createAtManager()
    let context = getContext() as common.UIAbilityContext
    const permissions: Array<Permissions> = ["ohos.permission.DISTRIBUTED_DATASYNC"];
    checker.requestPermissionsFromUser(context, permissions).then((data) => {
    })
  }

  build() {
    Row() {
      Column() {
        Text("myDeviceId - " + this.myDeviceId)
        Button("startMonitor")
          .onClick(()=>{
            try {
              //这里构造一个对象并赋值,原因是同一个包名构造的对象并不是单例的
              this.dmInstance = deviceManager.createDeviceManager("com.javalee.application")
              this.myDeviceId = this.dmInstance.getLocalDeviceId()
              this.dmInstance.on('discoverSuccess', (data) => {
                hilog.info(0x0000, 'testTag', '%{public}s', JSON.stringify(data));
              });
              // this.dmInstance.startDiscovering(discoverParam, filterOptions);
            } catch (err) {
              let e: BusinessError = err as BusinessError;
              console.error('testTag - createDeviceManager errCode:' + e.code + ',errMessage:' + e.message);
            }
          })
        Button("startDiscover").onClick(() => {
          let discoverParam: Record<string, number> = {
            'discoverTargetType': 1
          };
          let filterOptions: Record<string, number> = {
            'availableStatus': 0
          };
          try {
            // this.dmInstance = deviceManager.createDeviceManager("com.javalee.application")//这行注掉功能正常,开启异常
            // let myManage = deviceManager.createDeviceManager("com.javalee.application")
            // this.myDeviceId = this.dmInstance.getLocalDeviceId()
            // this.dmInstance.on('discoverSuccess', (data) => {
            //   hilog.info(0x0000, 'testTag', '%{public}s', JSON.stringify(data));
            // });
            this.dmInstance!.startDiscovering(discoverParam, filterOptions);
          } catch (err) {
            let e: BusinessError = err as BusinessError;
            console.error('testTag - startDiscovering errCode:' + e.code + ',errMessage:' + e.message);
          }
          this.flagA = false
          this.flagB = true
        }).enabled(this.flagA)
        Button("stopDiscover").onClick(() => {
          // let deviceManage = deviceManager.createDeviceManager("com.javalee.application")
          try {
            this.dmInstance!.stopDiscovering()
          } catch (err) {
            let e: BusinessError = err as BusinessError;
            console.error('testTag - stopDiscovering errCode:' + e.code + ',errMessage:' + e.message);
          }
          this.flagA = true
          this.flagB = false
        }).enabled(this.flagB)

        Button(this.message)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            router.pushUrl({ url: 'pages/DeviceListPage' });
          })
      }
      .width('100%')
      .align(Alignment.BottomStart)
      .height('150.00vp')
      .alignItems(HorizontalAlign.Center)
      .justifyContent(FlexAlign.SpaceBetween)
    }
    .height('100%')
    .offset({ x: '0.00vp', y: '0.00vp' })
    .displayPriority(2)
  }
}

实现效果

适配的版本信息

  • IDE:DevEco Studio 4.0.1.601
  • SDK:HarmoneyOS 4.0.10.11
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进