阅读 448

uniapp 微信小程序BLE开发踩坑记录

1.碰到的第一个问题,小米真机onBluetoothDeviceFound没有回调,华为mate30和ios手机都有回调。

发现这个是Android手机微信app定位权限的问题,进入手机设置打开微信定位权限就好了,但是uni.authorize方法并不能让微信去触发小米系统的定位权限弹窗(如下图) ,只能再搜索不到设备的时候提示用户去打开小米系统的权限设置了。

QQ截图20210513160811.png

一般用户的微信都是有定位的权限的,那部小米手机是测试机是第一次安装的微信,所以会出现这个问题。

2.调用notifyBLECharacteristicValueChange 一直报错:fail:no descriptor,不管是ios还是android都出现了这个问题。

去微信开发社区搜索notifyBLECharacteristicValueChange:fail:no descriptor,搜到了一大堆,但是没有一个解决方案,后来查看微信官方的ble示例代码(如下图),

QQ截图20210513163318.png

发现notifyBLECharacteristicValueChange并没有写success、fail或者complete的回调

           if (item.properties.notify || item.properties.indicate) {
            wx.notifyBLECharacteristicValueChange({
              deviceId,
              serviceId,
              characteristicId: item.uuid,
              state: true,
            })
          }
复制代码

然后发现notifyBLECharacteristicValueChange 即使报no descriptor错误,也可以收到onBLECharacteristicValueChange 的回调,最后我的代码是这样的

uni.notifyBLECharacteristicValueChange({
	state: true,
	deviceId: that.deviceId,
	serviceId: server_uuid,
	characteristicId: characteristicId,
	success(res) {
		console.log("notify成功");
		console.log(res);
		
	},
	fail(err) {
		console.log("notify失败");
		console.log(err);
	}
})

//监听设备发送过来的数据
uni.onBLECharacteristicValueChange(function(res) {
	console.log('收到设备发送过来的数据');
	console.log(res);
	let buf = Buffer.from(res.value);
	console.log(buf.toString());

})

//发送数据给设备
that.sendCongifComm(characteristicId)
复制代码

QQ截图20210513164837.png 这微信小程序真的是坑,也就是说只要调用了notifyBLECharacteristicValueChange方法,不管返回成功还是失败,都可以监听到onBLECharacteristicValueChange事件了么?

3 Android真机getBLEDeviceCharacteristics获取特征成功,同样代码ios真机获取getBLEDeviceCharacteristics失败 报错10004

微信官方的ble示例代码ios真机可以,结果发现是uuid的问题,service的uuid是设备写死给过来的,是小写的,然后就直接copy过来了,后来把uuid全部改为大写的就可以了。

文章分类
前端
文章标签