HarmonyOS 接入指南

原ICDevice因iOS会提示重名,为避免编译报错,后续所有系统的SDK版本将ICDevice更改为ICMDevice

SDK支持平台

因HarmonyOS NEXT还没正式发布,目前测试的机型只有Mate 60 Pro,系统版本HarmonyOS NEXT Developer Preveiew2.

SDK基于这个版本的API进行开发。

权限

动态申请: ohos.permission.ACCESS_BLUETOOTH

代码示例

这个仅是示例,实际申请请按自己的开发情况来。但需要注意,SDK初始化一定是在拥有蓝牙权限以后。

  private permissions: Array<Permissions> = ['ohos.permission.ACCESS_BLUETOOTH'];

  private DOMAIN_NUMBER: number = 0xFF00;

  // 调用申请蓝牙权限和初始化SDK
  initSDK(): void
  {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;
    // 获取应用程序的accessTokenID
    let tokenId: number = 0;
    try {
      bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo) => {
        let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
        tokenId = appInfo.accessTokenId;
        // 检查是否拥有蓝牙权限
        atManager.checkAccessToken(tokenId, this.permissions[0]).then(status => {
          if (status == abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
            // 没有权限就申请
            atManager.requestPermissionsFromUser(this.context, this.permissions, (err, permissons) => {
              if (permissons.authResults[0] == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
                // 申请权限后,初始化SDK
                let config = new ICDeviceManagerConfig();
                config.context = this.context.getApplicationContext();

                ICDeviceManager.shared().setDelegate(this);
                ICDeviceManager.shared().initMgrWithConfig(config);
              }
              else {
                hilog.error(1, "DEMO", "no ble permission");
              }
            })
          }
          else {
            // 已经拥有权限,初始化SDK
            let config = new ICDeviceManagerConfig();
            config.context = this.context.getApplicationContext();
            ICDeviceManager.shared().setDelegate(this);
            ICDeviceManager.shared().initMgrWithConfig(config);
          }

        });

      });

    } catch (error) {
      const err: BusinessError = error as BusinessError;
      console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);
    }

  }

导入SDK

SDK使用TypeScript与C++混合开发,提供har包进行导入.

因导入方式有多种,这里仅列出其中一种,导入步骤如下:

导入SDK 导入SDK

SDK接入流程

初始化SDK

注意:请获取到蓝牙权限以后,再去初始化SDK.

调用ICDeviceManager.shared().initMgrWithConfig(cfg)进行初始化SDK,在初始化之前,建议调用ICDeviceManager.shared().setDelegate(delegate)设置好代理对象。否则可能会丢失部分回调。如:

let config = new ICDeviceManagerConfig();
config.context = this.context.getApplicationContext();

ICDeviceManager.shared().setDelegate(this);
ICDeviceManager.shared().initMgrWithConfig(cfg);

扫描设备

SDK初始化完成后,如果需要查找附近的设备,可以调用扫描接口来进行扫描设备:

ICDeviceManager.shared().scanDevice(delegate);

设备将通过扫描回调代理对象进行回调(调用扫描接口前,请确保蓝牙是否开启,否则该接口不会生效,如正常扫描过程中关闭蓝牙,然后再次打开蓝牙,请重新调用该接口,SDK不会自动去开启扫描).

注: 如果已知道设备的mac地址,可以直接调用添加设备接口,不用调用扫描接口。SDK内部会自动去连接这个设备。

停止扫描

调用了扫描设备接口,在已经找到需要的设备后,请调用停止扫描(sdk不会自动停止):

ICDeviceManager.shared().stopScan();

添加设备

如果已经找到需要的设备了,调用添加设备接口:

ICDeviceManager.shared().addDevice(device,addCallback);

接口可以时SDK去连接设备并收取数据(请确保设备处于亮屏状态,否则SDK将会不会收到数据, 中途蓝牙关闭或设备息屏,当蓝牙重新开启或设备再次亮屏,SDK会自动去连接,无需再次添加设备或扫描设备).

删除设备

当不想SDK去连接和收取设备数据时,从SDK移除该设备,可以调用移除设备接口:

ICDeviceManager.shared().removeDevice(device,removeCallback);

更新用户信息

因为要计算用户的体脂以及一些其他数据,所以需要App调用更新用户信息接口:

ICDeviceManager.shared().updateUserInfo(userInfo);

设备设置接口

部分设备支持设置单位或卡路里等属性,获取这些设置接口:

ICDeviceManager.shared().getSettingManager();

体脂算法接口

获取体脂算法接口:

ICDeviceManager.shared().getBodyFatAlgorithmsManager();
GUANGDONG WELLAND TECHNOLOGY CO.,LTD All Right ReservedUpdate time: 2024-06-29 12:45:05

results matching ""

    No results matching ""

    results matching ""

      No results matching ""