SDK接入步骤
一、初始化QNSDK
使用QNBleApi.initSdk进行初始化,前文已有相关介绍,请查看
二、设置身高体重秤扫描回调监听类
在开启蓝牙扫描前,需要设置监听类,方法为QNBleApi.setBleDeviceDiscoveryListener,该方法只需要调用一次即可,在确定不需要扫描记得设置为 null/nil
android 示例:
QNBleApi mQNBleApi = QNBleApi.getInstance(context);
mQNBleApi.setBleDeviceDiscoveryListener(new QNBleDeviceDiscoveryListener() {
@Override
public void onDeviceDiscover(QNBleDevice device) {
//扫描到的身高秤设备会在这里回调
}
...
});
iOS 示例:
//设置代理
QNBleApi *bleApi = [QNBleApi sharedBleApi];
bleApi.discoveryListener = self;
bleApi.connectionChangeListener = self;
bleApi.dataListener = self;
bleApi.bleStateListener = self;
三、启动蓝牙扫描
确认蓝牙已打开,安卓这边还需要检查下定位权限
和定位开关
。如果确认蓝牙已打开,定位权限已授权,定位服务开关已打开,则可以开始蓝牙扫描
安卓 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()) {
Toast.makeText(context, code+":"+msg).show();
}
}
});
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示例:
- (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(this).setDataListener(new QNScaleDataListener() {
//扫码枪获取扫描结果
@Override
public void onGetBarCode(String devMac, String barCode) {
}
//扫码枪获取扫描结果失败
@Override
public void onGetBarCodeFail(String devMac) {
}
//扫码枪连接状态变化
@Override
public void onGetBarCodeGunState(String devMac, boolean isConnected) {
}
//实时体重数据回调
@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) {
}
...
});
iOS示例:
- (void)onGetUnsteadyWeight:(QNBleDevice *)device weight:(double)weight {
}
- (void)onGetScaleData:(QNBleDevice *)device data:(QNScaleData *)scaleData {
}
- (void)onGetStoredScale:(QNBleDevice *)device data:(NSArray<QNScaleStoreData *> *)storedDataList {
}
/// 获取条形码
- (void)onGetBarCode:(NSString *)barCode mac:(NSString *)mac {
self.unstableWeightLabel.text = [NSString stringWithFormat:@"条形码内容:%@",barCode];
}
- (void)onGetBarCodeFail:(NSString *)mac {
self.unstableWeightLabel.text = [NSString stringWithFormat:@"获取条形码失败:%@",barCode];
}
- (void)onGetBarCodeGunState:(BOOL)isConnect mac:(NSString *)mac {
if (isConnect) {
self.unstableWeightLabel.text = @"设备连接扫码枪";
}else {
self.unstableWeightLabel.text = @"扫码枪断开连接";
}
}
六、蓝牙连接身高体重秤
收到回调设备后,可以判断是否为需要连接的设备(这个属于 APP 的业务逻辑),如果是的话就进行连接QNBleApi.connectHeightScaleDevice
android示例:
QNBleApi.getInstance(this).connectHeightScaleDevice(mBleDevice, deviceConfig, (code, msg) -> {
//代表方法执行是否成功
if (code != CheckStatus.OK.getCode()) {
Toast.makeText(context, code+":"+msg).show();
}
})
iOS示例:
QNHeightDeviceConfig *config = [[QNHeightDeviceConfig alloc]init];
QNUser *user = [[QNUser alloc]init];
user.gender = @"female";
user.birthday = [NSDate dateWithString:@"1995-01-01" format:@"yyyy-MM-dd"];
config.curUser = user;
[_bleApi connectHeightScaleDevice:device config:config callback:^(NSError *error) {
if (error) {
NSLog(@"%@", error.localizedDescription);
}
}];
如何配网
如果要进行配网,注意deviceConfig参数,需要赋值QNWiFiConfig
七、断开链接
SDK主动断开连接QNBleApi.disconnectDevice
android示例:
QNBleApi.getInstance(RulerActivity.this).disconnectDevice(mac, new QNResultCallback() {
@Override
public void onResult(int code, String msg) {
}
});
iOS示例:
[_bleApi disconnectDeviceWithMac:nil callback:^(NSError *error) {
}];
// or
[_bleApi disconnectDeviceWithMac:device.mac callback:^(NSError *error) {
}];