减重秤说明

减重秤在用户秤的基础上增加了减重相关功能,相关API如下:

1. QNUserScaleConfig

新增属性 类型 说明
slimDeviceConfig QNSlimDeviceConfig 减重秤的设备配置信息类

说明:创建蓝牙链接(connectUserScaleDevice)的时候传入的config(QNUserScaleConfig)属性是一个类,该类增加 减重秤配置(闹钟、提示音等设置) 属性,即slimDeviceConfig(QNSlimDeviceConfig)属性

2. QNBleApi

新增方法名 说明
updateSlimDeviceConfig 更新减重秤设备设置
updateUserCurveData 更新秤端已注册用户的曲线体重数据
updateUserSlimConfig 更新秤端已注册用户的减重配置
restoreFactorySettings 设备恢复出厂设置

减重秤的接入

一、初始化QNSDK

使用QNBleApi.initSdk进行初始化,前文已有相关介绍,请查看

二、设置减重秤扫描回调监听类

在开启蓝牙扫描前,需要设置监听类,方法为QNBleApi.setBleDeviceDiscoveryListener,该方法只需要调用一次即可,在确定不需要扫描记得设置为 null/nil

android 示例:

 QNBleApi.getInstance(context).setBleDeviceDiscoveryListener(new QNBleDeviceDiscoveryListener() {
    @Override
    public void onDeviceDiscover(QNBleDevice device) {
        //该方法回调设备对象,可以设备对象进行处理
    }

    @Override
    public void onStartScan() {
        //开始扫描的回到
    }

    @Override
    public void onStopScan() {
        //结束扫描的回到
    }

    @Override
    public void onScanFail(int code) {
        //扫描失败的回调,会有错误码返回,具体可以参考 错误码详情页
    }

    @Override
    public void onBroadcastDeviceDiscover(QNBleBroadcastDevice device) {
        //广播秤的数据回调,该处只会回调广播秤的数据
    }
});

iOS 示例:

// 设置代理
self.bleApi = [QNBleApi sharedBleApi];
self.bleApi.discoveryListener = self;


// 实现代理方法
#pragma mark - QNBleDeviceDiscorveryListener
- (void)onDeviceDiscover:(QNBleDevice *)device {
    //该方法会在发现设备后回调

}

三、启动蓝牙扫描

确认蓝牙已打开,安卓这边还需要检查下定位权限定位开关。如果确认蓝牙已打开,定位权限已授权,定位服务开关已打开,则可以开始蓝牙扫描

安卓 6.0 以后,对 targetSdkVersion>=23 以上的 APP,进行蓝牙扫描需要获取定位权限,详细说明查看关于
定位服务开关不是强制性的,但是某些手机不打开这个开关,也无法扫描到设备,跟各家的手机系统相关

iOS13系统增加了蓝牙使用权限,需要检查是否有使用权限,确认已授权并且蓝牙已打开的情况下,开始扫描

扫描方法为QNBleApi.startBleDeviceDiscovery,扫描到的设备数据,会在上面设置的扫描接口中QNBleDeviceDiscoveryListener回调。

另外有关扫描的一些特性设置,可以在QNConfig进行设置,需要设置的内容已基本覆盖。

android示例:

QNBleApi.getInstance(context).startBleDeviceDiscovery(new QNResultCallback() {
            @Override
            public void onResult(int code, String msg) {
                //该方法并不回到设备,而是表示扫描是否启动成功
                if (code != CheckStatus.OK.getCode()) {
                   ToastMaker.show(ScanActivity.this,code+":"+msg);
                }
            }
        });

iOS示例:

//启动扫描
[[QNBleApi sharedBleApi] startBleDeviceDiscovery:^(NSError *error) {
    //该处回调表示启动扫描方法是否成功
    if (error) {
        NSLog([NSString stringWithFormat:@"启动扫描方法失败,原因: %@",error]);
    }
}];

四、设置减重秤连接状态监听

设置蓝牙连接变化监听QNBleApi.setBleConnectionChangeListener, 接收SDK回传设备连接状态变化

android示例:

QNBleApi.getInstance(this).setBleConnectionChangeListener(new QNBleConnectionChangeListener() {
            //正在连接
            @Override
            public void onConnecting(QNBleDevice device) {

            }

            //已连接,注意此时还不能进行其他蓝牙操作
            @Override
            public void onConnected(QNBleDevice device) {

            }

            //发现服务
            @Override
            public void onServiceSearchComplete(QNBleDevice device) {

            }

            //正在断开连接,调用断开连接时,会马上回调
            @Override
            public void onDisconnecting(QNBleDevice device) {

            }

            // 断开连接,断开连接后回调
            @Override
            public void onDisconnected(QNBleDevice device) {

            }

            //出现了连接错误,错误码参考附表
            @Override
            public void onConnectError(QNBleDevice device, int errorCode) {

            }

            //可以执行其他蓝牙操作API方法
            @Override
            public void onStartInteracting(QNBleDevice device) {

            }
        });

iOS示例:

// 设置代理
self.bleApi.connectionChangeListener = self;


/// 实现代理
#pragma mark - QNBleConnectionChangeListener
- (void)onConnecting:(QNBleDevice *)device {

}

- (void)onConnected:(QNBleDevice *)device {

}

- (void)onServiceSearchComplete:(QNBleDevice *)device {

}

- (void)onDisconnecting:(QNBleDevice *)device {

}

- (void)onDisconnected:(QNBleDevice *)device {

}

- (void)onConnectError:(QNBleDevice *)device error:(NSError *)error {

}

五、设置减重秤数据状态监听

设置测量数据监听QNBleApi.setDataListener,接收SDK回传测量状态与测量数据。

android 示例:

QNBleApi.getInstance(context).setDataListener(new QNScaleDataListener() {
    @Override
    public void onGetUnsteadyWeight(QNBleDevice device, double weight) {
        //该方法是收到了不稳定的体重数据,一次测量中,该方法会回调多次,直到数据稳定,拿到完整数据.
    }

    @Override
    public void onGetScaleData(QNBleDevice device, QNScaleData data) {
        //该方法是收到了完整的测量数据
    }

    @Override
    public void onGetStoredScale(QNBleDevice device, List<QNScaleStoreData> storedDataList) {
        //该方法是收到了秤端存储数据,存储数据的处理方式可以参考demo,也可以自己定义
    }

    @Override
    public void onGetElectric(QNBleDevice device, int electric) {
        //这个是获取到了电量百分比,只有充电款秤获取到的电量才有意义
    }

    //测量过程中的连接状态
    @Override
    public void onScaleStateChange(QNBleDevice device, int status) {
        setBleStatus(status);
    }
});

iOS示例:

// 设置代理
self.bleApi.dataListener = self;

// 实现代理方法
- (void)onGetUnsteadyWeight:(QNBleDevice *)device weight:(double)weight {
    // 实时体重
}

- (void)onGetScaleData:(QNBleDevice *)device data:(QNScaleData *)scaleData {
    // 获取完整的测量数据
}

- (void)onGetStoredScale:(QNBleDevice *)device data:(NSArray<QNScaleStoreData *> *)storedDataList {
    // 获取历史数据
}

- (void)onScaleEventChange:(QNBleDevice *)device scaleEvent:(QNScaleEvent)scaleEvent {
    // 秤事件回调
}

- (void)onScaleStateChange:(QNBleDevice *)device scaleState:(QNScaleState)state {
    NSLog(@"设备状态已更新");

}

- (void)deviceRestoreFactorySettings:(BOOL)state device:(QNBleDevice *)device user:(QNUser *)user {

}

- (void)updateUserCurveDataResult:(BOOL)success device:(QNBleDevice *)device userIndex:(int)userIndex {

}

- (void)updateSlimDeviceConfigResult:(BOOL)success device:(QNBleDevice *)device {

}

- (void)updateUserSlimConfigResult:(BOOL)success device:(QNBleDevice *)device userIndex:(int)userIndex {

}

六、蓝牙连接减重秤

收到回调设备后,可以判断是否为需要连接的设备(这个属于 APP 的业务逻辑),如果是的话就进行连接QNBleApi.connectUserScaleDevice

android示例:

QNBleApi.getInstance(context).connectUserScaleDevice(device, mQnUserScaleConfig, new QNResultCallback() {
            @Override
            public void onResult(int code, String msg) {

            }
        });

iOS示例:

 [_bleApi connectUserScaleDevice:device config:config callback:^(NSError *error) {

 }];

七、断开链接

SDK主动断开连接QNBleApi.disconnectDevice
android示例:

QNBleApi.getInstance(RulerActivity.this).disconnectDevice(mac, new QNResultCallback() {
            @Override
            public void onResult(int code, String msg) {

            }
        });

iOS示例:

   [self.bleApi disconnectDeviceWithMac:nil callback:^(NSError *error) {


    }];

    // or
    [self.bleApi disconnectDeviceWithMac:device.mac callback:^(NSError *error) {


    }];

八、设置减重秤配置

使用QNBleApi.updateSlimDeviceConfig更新减重秤的相关配置。

android示例:

QNBleApi.getInstance(context).updateSlimDeviceConfig(qnSlimDeviceConfig, new QNResultCallback() {
                @Override
                public void onResult(int code, String msg) {
                    if (code == CheckStatus.OK.getCode()) {
                        Toast.makeText(UserScaleActivity.this, "设置方法调用成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(UserScaleActivity.this, "设置方法调用失败", Toast.LENGTH_SHORT).show();
                    }
                }
            });

iOS示例:

QNSlimDeviceConfig *config = [[QNSlimDeviceConfig alloc] init];
// 对config进行设置

[self.bleApi updateSlimDeviceConfig:config callback:^(NSError * _Nullable error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (error) {
                weakSelf.resultTextView.text = [NSString stringWithFormat:@"减重秤配置更新失败: %@", error.localizedDescription];
            }
        });
}];

设置结果会通过QNUserScaleDataListener的updateSlimDeviceConfigResult回调返回。

九、设置减重秤用户相关

9.1 注册或访问用户

使用QNBleApi.switchUserScaleUser注册和访问用户,访问用户时,user.index需要赋值为[1,8]的正整数;注册用户时,user.index赋值为<=0的值

android示例:

QNUser user = mQNBleApi.buildUser(curUser.getUserId(), curUser.getHeight(), curUser.getGender(), curUser.getBirthDay(),
                curUser.getAthleteType(), curUser.getUserShape(), curUser.getUserGoal(), curUser.getClothesWeight(), index, secret,
                    new QNResultCallback() {
                        @Override
                        public void onResult(int code, String msg) {

                        }
                    });
QNBleApi.getInstance(context).switchUserScaleUser(user, new QNResultCallback() {
                @Override
                public void onResult(int code, String msg) {
                    Toast.makeText(UserScaleActivity.this, "执行switchUserScaleUser", Toast.LENGTH_SHORT).show();
                }
            });

iOS示例:

    QNUser *user = [[QNUser alloc] init];
    // 从UI控件获取运动员类型
    user.athleteType = YLAthleteDefault;
    // 从UI控件获取性别 (0=女, 1=男)
    user.gender = @"female";
    user.height = 170; 
    // 从UI控件获取生日
    user.birthday = self.birthdayPicker.date;
    // 注册用户时,index = 0 ; 访问用户时,index在[1,8]
    user.index = 0; 
    user.secret = 1001;
    __weak typeof(self) weakSelf = self;
    [self.bleApi switchUserScaleUser:user callback:^(NSError * _Nullable error) {

    }];

9.2 删除用户

使用QNBleApi.deleteScaleUsers删除索引下的用户信息

android示例:

QNBleApi.getInstance(context).deleteScaleUsers(selectedItems, new QNResultCallback() {
                @Override
                public void onResult(int code, String msg) {
                    Toast.makeText(UserScaleActivity.this, "删除用户: " + msg, Toast.LENGTH_SHORT).show();
                }
            });

iOS示例:

    [self.bleApi deleteScaleUsers:@[@1,@3,@5,@7,@8] callback:^(NSError * _Nullable error) {

    }];

9.3 更新用户减重配置

使用QNBleApi.updateuserslimconfig更新用户减重配置

android示例:

QNBleApi.getInstance(context).updateUserSlimConfig(curUser.getIndex(), qnSlimUserSlimConfig, new QNResultCallback(){
            @Override
            public void onResult(int code, String msg) {
                Toast.makeText(UserScaleActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

iOS示例:

    QNSlimUserSlimConfig *config = [[QNSlimUserSlimConfig alloc] init];
    // 设置减重天数计算规则(默认自动递增)
    config.slimDayCountRule = QNSlimDayCountRuleAutoIncrement;
    config.slimDays = 1;
    config.curveWeightSelection = QNSlimCurveWeightSelectionLastOfDay;
    config.targetWeight = 60.0; 
    config.initialWeight = 70.0;

    int32_t userIndex = 1;

    __weak typeof(self) weakSelf = self;
    [self.bleApi updateUserSlimConfig:config userIndex:userIndex callback:^(NSError * _Nullable error) {

    }];

设置结果会通过QNUserScaleDataListener的updateUserSlimConfigResult回调返回。

9.4 更新体重曲线数据

使用QNBleApi.updateUserCurveData更新体重曲线数据

android示例:

QNBleApi.getInstance(context).updateUserCurveData(curUser.getIndex(), curveData, new QNResultCallback() {
                        @Override
                        public void onResult(int code, String msg) {
                            QNDemoLogger.d("UserScaleActivity", "updateUserCurveData: " + msg);
                        }
                    });

iOS示例:

QNSlimUserCurveData *curveData = [[QNSlimUserCurveData alloc] init];
// 存储14个体重数据
curveData.curveWeightArr = @[];
curveData.todayFlag = YES;

[self.bleApi updateUserCurveData:curveData userIndex:(int32_t)userIndex callback:^(NSError * _Nullable error) {

}];

设置结果会通过QNUserScaleDataListener的updateUserCurveDataResult回调返回。

9.5 更新用户基准体重

使用QNBleApi.updateUserScaleIdentifyWeight更新用户基准体重

android示例:

QNBleApi.getInstance(context).updateUserScaleIdentifyWeight(weight, new QNResultCallback() {
        @Override
        public void onResult(int code, String msg) {
            Toast.makeText(UserScaleActivity.this, "更新体重为: " + weight + " " + msg, Toast.LENGTH_SHORT).show();
        }
    });

iOS示例:

    __weak typeof(self) weakSelf = self;
    double weight = 70.0
    [self.bleApi updateUserScaleIdentifyWeight:weight callback:^(NSError * _Nullable error) {

    }];

十、恢复出厂设置

使用QNBleApi.restoreFactorySettings恢复出厂设置

android示例:

QNBleApi.getInstance(context).restoreFactorySettings(new QNResultCallback() {
            @Override
            public void onResult(int code, String msg) {
                Toast.makeText(UserScaleActivity.this, "恢复出厂设置成功", Toast.LENGTH_SHORT).show();
            }
        });

iOS示例:

    __weak typeof(self) weakSelf = self;
    [self.bleApi restoreFactorySettingsCallback:^(NSError * _Nullable error) {

    }];

设置结果会通过QNUserScaleDataListener的deviceRestoreFactorySettings回调返回。

results matching ""

    No results matching ""