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 onSetHeightScaleConfigState(QNBleDevice device, boolean isLanguageSuccess, boolean isWeightUnitSuccess, boolean isHeightUnitSuccess, boolean isVolumeSuccess) {

            }

            //获取当前身高秤秤端信息的回调
            @Override
            public void onGetHeightScaleConfig(QNBleDevice device, QNHeightDeviceFunction function) {

            }

            //身高秤恢复出厂设置成功与否的回调
            @Override
            public void onResetHeightScaleState(QNBleDevice device, boolean isSuccess) {

            }

            //身高秤清除秤端wifi配置成功与否的回调
            @Override
            public void onClearHeightScaleWifiConfigState(QNBleDevice device, boolean isSuccess) {

            }

            //获取身高秤wifi配置信息(只返回ssid信息)
            @Override
            public void onGetHeightScaleWifiConfig(QNBleDevice device, boolean isSuccess, String ssid) {

            }

            //身高秤扫描可用的Wifi名称的回调
            @Override
            public void onScanHeightScaleWifiSsidResult(QNBleDevice device, String ssid, int rssi) {

            }

            //身高秤扫描可用Wifi结束的回调
            @Override
            public void onScanHeightScaleWifiSsidFinish(QNBleDevice device, int resultCode) {

            }

            //扫码枪获取扫描结果
            @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 = @"扫码枪断开连接";
    }
}

- (void)onSetHeightScaleConfigState:(BOOL)isLanguageSuccess
                isWeightUnitSuccess:(BOOL)isWeightUnitSuccess
                isHeightUnitSuccess:(BOOL)isHeightUnitSuccess
                    isVolumeSuccess:(BOOL)isVolumeSuccess
                             device:(QNBleDevice *)device {

}

- (void)onGetHeightScaleConfig:(QNHeightDeviceFunction *)function device:(QNBleDevice *)device {


}

- (void)onResetHeightScaleState:(BOOL)state device:(QNBleDevice *)device {

}

- (void)onGetHeightScaleWifiConfig:(BOOL)state ssid:(NSString *)ssid device:(QNBleDevice *)device {

}

- (void)onClearHeightScaleWifiConfigState:(BOOL)state device:(QNBleDevice *)device {

}

- (void)onScanHeightScaleWifiSsidResult:(NSString *)ssid rssi:(int)rssi device:(QNBleDevice *)device {

}

- (void)onScanHeightScaleWifiSsidFinish:(int)state device:(QNBleDevice *)device {

}

六、蓝牙连接身高体重秤

收到回调设备后,可以判断是否为需要连接的设备(这个属于 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) {


    }];

八、身高体重秤配置管理

在连接成功后,可以对身高体重秤进行各种配置管理操作。

8.1 获取身高秤配置(目前仅支持CP30G)

使用QNBleApi.getHeightScaleConfig获取当前身高秤的配置信息。

android示例:

    QNBleApi.getInstance(this).getHeightScaleConfig((code, msg) -> {

    });

iOS示例:

[_bleApi getHeightScaleConfig:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
}];

配置信息会通过QNScaleDataListener的OnGetHeightScaleConfig回调返回。

8.2 设置身高秤配置

使用QNBleApi.setHeightScaleConfig更新身高秤的相关配置。

android示例:

    QNHeightDeviceFunction function = new QNHeightDeviceFunction();
    function.setLanguage(lang);
    function.setWeightUnit(weight);
    function.setHeightUnit(height);
    function.setVolume(volume);

    QNBleApi.getInstance(this).setHeightScaleConfig(function, (code, msg) -> {

    });

iOS示例:

QNHeightDeviceFunction *setFunction = [[QNHeightDeviceFunction alloc] init];
/// function 赋值
function.weightUnit = QNUnitKG;
function.heightUnit = QNHeightUnitCM;
function.voiceLanguage = QNLanguageZH;
function.volume = QNVolumeOne; 

// 设置相关配置参数
[_bleApi setHeightScaleConfig:function callback:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
}];

设置结果会通过QNScaleDataListener的OnSetHeightScaleConfigState回调返回。

8.3 恢复出厂设置

使用QNBleApi.resetHeightScale恢复身高秤的出厂设置(目前仅支持CP30G)。

android示例:

    QNBleApi.getInstance(this).resetHeightScale((code, msg) -> {

    });

iOS示例:

[_bleApi resetHeightScale:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
}];

重置结果会通过QNScaleDataListener的OnResetHeightScaleState回调返回。

九、WiFi配网管理

身高体重秤支持WiFi配网功能,可以进行WiFi配置的管理操作。

9.1 扫描可用WiFi

使用QNBleApi.scanHeightScaleWifiSsid扫描身高秤可用的WiFi名称。

android示例:

    QNBleApi.getInstance(this).scanHeightScaleWifiSsid((code, msg) -> {

    });

iOS示例:

[_bleApi scanHeightScaleWifiSsid:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
}];

扫描到的WiFi名称会通过QNScaleDataListener的OnScanHeightScaleWifiSsidResult回调返回,扫描结束会通过OnScanHeightScaleWifiSsidFinish回调通知。

9.2 开始WiFi配网

使用QNBleApi.startPairHeightScaleWifi开始身高秤WiFi配网。

android示例:

    QNWiFiConfig pairWifiConfig = new QNWiFiConfig();
    pairWifiConfig.setSsid("wifiName");
    pairWifiConfig.setPwd("wifiPwd");
    pairWifiConfig.setServeUrl("serverUrl");
    pairWifiConfig.setEncryptionKey("encryption");
    pairWifiConfig.setFotaUrl("otaUrl");
    QNBleApi.getInstance(this).startPairHeightScaleWifi(pairWifiConfig, (code, msg) -> {

    });

iOS示例:

QNWifiConfig *wifiConfig = [[scaleWifiConfig alloc] init];
scaleWifiConfig.ssid = @"wifiName";
scaleWifiConfig.pwd = @"wifiPwd";
scaleWifiConfig.serveUrl = @"serverUrl";
scaleWifiConfig.encryptionKey = @"encryption";
scaleWifiConfig.fotaUrl = @"otaUrl";

[_bleApi startPairHeightScaleWifi:wifiConfig callback:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
}];

9.3 获取秤端WiFi配置

使用QNBleApi.getHeightScaleWifiConfig获取身高秤的WiFi配置(目前仅支持CP30G)。

android示例:

    QNBleApi.getInstance(this).getHeightScaleWifiConfig((code, msg) -> {

    });

iOS示例:

[_bleApi getHeightScaleWifiConfig:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
}];

WiFi配置信息会通过QNScaleDataListener的OnGetHeightScaleWifiConfig回调返回。

9.4 清除WiFi配置

使用QNBleApi.clearHeightScaleWifiConfig清除身高秤的WiFi配置(目前仅支持CP30G)。

android示例:

    QNBleApi.getInstance(this).clearHeightScaleWifiConfig((code, msg) -> {

    });

iOS示例:

[_bleApi clearHeightScaleWifiConfig:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
}];

清除结果会通过QNScaleDataListener的OnClearHeightScaleWifiConfigState回调返回。

results matching ""

    No results matching ""