厨房秤
Yolanda厨房秤设备对设备分为 广播设备 与 蓝牙设备 两种。
广播厨房秤在测量时,会不断向外发射蓝牙广播信号,里面会包含称重的信息。
该设备的工作流程与广播秤相同:
蓝牙厨房秤在测量时,需要先发现蓝牙厨房秤设备与设备建立连接后,才能正常上传数据。
一、初始化
使用QNBleApi.initSdk进行初始化,前文已有相关介绍,请查看
二、扫描
1. 设置蓝牙扫描回调监听类
在扫描前,需要设置监听类,方法为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) {
//广播秤,该类设备需要在这个回调中处理事件
}
@Override
public void onKitchenDeviceDiscover(QNBleKitchenDevice device) {
if (device.isBluetooth()) {
//此处需保存蓝牙厨房秤对象,留待后续连接
}
}
});
//(蓝牙厨房秤专属)数据监听器
QNBleApi.getInstance(context).setKitchenDataListener(new QNBleKitchenDataListener() {
@Override
public void onGetBleKitchenWeight(QNBleKitchenDevice device, double weight) {
}
@Override
public void onBleKitchenConnecting(QNBleKitchenDevice device) {
setBleStatus(QNScaleStatus.STATE_CONNECTING);
}
@Override
public void onBleKitchenConnected(QNBleKitchenDevice device) {
setBleStatus(QNScaleStatus.STATE_CONNECTED);
}
@Override
public void onBleKitchenDisconnected(QNBleKitchenDevice device) {
setBleStatus(QNScaleStatus.STATE_DISCONNECTED);
}
@Override
public void onBleKitchenError(QNBleKitchenDevice device, int errorCode) {
Log.d("ConnectActivity", "onConnectError:" + errorCode);
setBleStatus(QNScaleStatus.STATE_DISCONNECTED);
}
});
iOS示例:
//设置代理
QNBleApi *bleApi = [QNBleApi sharedBleApi];
bleApi.discoveryListener = self;
bleApi.bleKitchenDataListener = self; //(蓝牙厨房秤专属)数据监听器
//实现代理方法
- (void)onDeviceDiscover:(QNBleDevice *)device {
//该设备不用处理该处的回调
}
- (void)onBroadcastDeviceDiscover:(QNBleBroadcastDevice *)device {
//广播秤,该类设备需要在这个回调中处理事件
}
- (void)onKitchenDeviceDiscover:(QNBleKitchenDevice *)device {
//厨房秤,该类设备需要在这个回调中处理事件
}
- (void)onGetBleKitchenWeight:(QNBleKitchenDevice *)device weight:(double)weight {
//蓝牙厨房秤专属, 测量数据回调
}
- (void)onStopScan {
//停止扫描时回调
}
- (void)onStartScan {
//开始扫描时回调
}
2. 启动扫描
确认蓝牙已打开,安卓这边还需要检查下定位权限
和定位开关
。如果确认蓝牙已打开,定位权限已授权,定位服务开关已打开,则可以开始蓝牙扫描
安卓6.0以后,对targetSdkVersion>=23以上的APP,进行蓝牙扫描需要获取定位权限,详细说明查看关于 定位服务开关不是强制性的,但是某些手机不打开这个开关,也无法扫描到设备,跟各家的手机系统相关 iOS13系统增加了蓝牙使用权限,需要检查是否有使用权限,确认已授权并且蓝牙已打开的情况下,开始扫描
扫描方法为QNBleApi.startBleDeviceDiscovery,扫描到的设备数据,会在上面设置的扫描接口中QNBleDeviceDiscoveryListener回调。
另外有关扫描的一些特性设置,可以在QNConfig进行设置,这些选项应该足够使用。
通常APP会有个专门用于测量的界面,我们一般是在界面显示之后进行蓝牙扫描,界面消失的时候停止扫描。
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]);
}
}];
3. 连接设备(蓝牙厨房秤专用)
调用连接方法连接onKitchenDeviceDiscover中回调的蓝牙厨房秤设备对象
android示例:
QNBleApi.getInstance(context).connectBleKitchenDevice(device, new QNResultCallback() {
@Override
public void onResult(int code, String msg) {
}
});
iOS示例:
[_bleApi connectBleKitchenDevice:kitchenDevice callback:^(NSError *error) {
}];
三、结果处理
android示例:
//广播厨房秤数据处理
public void onKitchenDeviceDiscover(QNBleKitchenDevice device) {
if (null != device && device.getMac().equals(mBleDevice.getMac())) {
//处理数据
}
}
//蓝牙厨房秤数据处理
public void onGetBleKitchenWeight(QNBleKitchenDevice device, double weight) {
}
iOS示例:
#pragma mark - 广播厨房秤处理逻辑
- (void)onKitchenDeviceDiscover:(QNBleKitchenDevice *)device {
//处理数据
}
#pragma mark - 蓝牙厨房秤处理逻辑
- (void)onGetBleKitchenWeight:(QNBleKitchenDevice *)device weight:(double)weight {
//处理数据
}
至此,厨房秤的基本流程已经走完,APP可以在收到解析数据后自行保存数据和展示数据。 其他问题可以先参考Demo中的代码,如果有问题还可以查看常见问题。常见问题还未找到相关问题,可以尝试在SDK中搜索下是否有相关API或说明,如果还是没有,请联系我司技术人员进行协助对接。
Demo地址如下: iOSDemo