微信小程序蓝牙连接部分Android14调用wx.setBLEMTU协商低功耗最大传输单元失败解决方案(部分安卓14设置超过23就会报错)

1.解决方案的核心内容:第一次设置失败不要管,在complate函数里面继续往下连接,然后设置一个定时器每1秒钟在重新设置一次,肯定会成功的!!!!!!!!!!!!!!!!

2.参考代码:

			/*开启监听蓝牙传值*/
			notifyEquip() {
				let _ = this;
				console.log('*************************')
				if (uni.getSystemInfoSync().platform === 'android') {
					uni.setBLEMTU({
						deviceId: _.deviceId, // 设备ID,在【4】里获取到
						mtu: 512, // 服务UUID,在【6】里能获取到
						success(res) {
							console.log('设置mtu成功')
							wx.getBLEMTU({
							  deviceId: _.deviceId,
							  writeType: 'write',
							  success (res) {
							    console.log(res)
							  }
							})
							_.notifyBLECharacter()
						},
						fail(err) {
							console.error(err)
							_.setAndroidMTU() // 重要代码如果失败继续往下连接然后重复设置
						}
					})
				} else {
					_.notifyBLECharacter()
				}
			},
			/*处理设置失败安卓协商低功耗最大传输单元*/
			setAndroidMTU() {
				let _ = this;
				console.log('处理安卓协商低功耗最大传输单元失败的方法')
				_.notifyBLECharacter()
				_.mtuTimer = setInterval(() =>{
					console.log('开始循环设置MTU值')
					uni.setBLEMTU({
						deviceId: _.deviceId, // 设备ID,在【4】里获取到
						mtu: 512, // 服务UUID,在【6】里能获取到
						success(res) {
							console.log('设置mtu成功')
						},
						fail(err) {
							console.error(err)
						},
						complete() {
							wx.getBLEMTU({
								deviceId: _.deviceId,
								writeType: 'write',
								success(res) {
									console.log(res)
									clearInterval(_.mtuTimer)
									_.mtuTimer = null;
								}
							})
						}
					})
				},1500)
			},

3.基本上设置一两次,虽然设置还是显示设置失败但是wx.getBLEMTU里面查到的低功耗最大传输单元会比23大,我这边显示的是517
在这里插入图片描述

### 回答1: 小程序通过蓝牙发送JSON的过程如下: 首先,小程序需要获取用户的授权,以使用蓝牙功能。这可以通过调用小程序的`wx.authorize`方法来实现。用户在授权之后,小程序将能够访问蓝牙设备的功能。 接下来,小程序需要搜索并连接到目标蓝牙设备。可以通过调用小程序的`wx.startBluetoothDevicesDiscovery`方法来搜索周围的蓝牙设备。一旦找到目标设备,可以通过调用`wx.createBLEConnection`方法来与该设备建立连接连接成功后,小程序可以使用`wx.writeBLECharacteristicValue`方法向蓝牙设备发送数据。可以将JSON数据转换为字符串,并将其作为参数传递给该方法。该方法将数据发送到蓝牙设备上的指定特征值。 蓝牙设备接收到数据后,可以进行相应的处理。如果设备期望通过蓝牙发送响应,可以将响应数据写入到特定的特征值中,然后小程序可以使用`wx.onBLECharacteristicValueChange`监听该特征值,以获取设备的响应数据。 最后,当小程序不再需要与蓝牙设备通信时,可以调用`wx.closeBLEConnection`方法来断开与设备的连接。 总而言之,小程序通过蓝牙发送JSON的过程包括授权、搜索设备、建立连接、发送数据、接收响应和断开连接等步骤。通过调用相应的小程序API,可以轻松实现与蓝牙设备的通信。 ### 回答2: 小程序作为一种轻量级的应用程序,可以通过内置的蓝牙功能向外部设备发送JSON数据。 首先,小程序需要先获取设备的蓝牙权限,并确保设备的蓝牙功能是可用的。然后,通过小程序提供的API接口,可以搜索并连接到目标蓝牙设备。 在成功连接到目标设备后,小程序可以使用蓝牙模块提供的方法,如writeBLECharacteristicValue发送JSON数据。首先,需要将JSON数据转换为字节数组,可以使用JSON.stringify将JSON对象转换为字符串,再使用TextEncoder将字符串转换为字节数组。 然后,使用writeBLECharacteristicValue方法向蓝牙设备发送转换后的字节数组。该方法需要传入三个参数,即蓝牙设备的deviceId、serviceId和写入数据的characteristicId。 发送数据后,可以通过监听蓝牙模块的onBLECharacteristicValueChange事件来获取设备返回的数据。当接收到数据时,会触发该事件,并通过事件回调函数的参数传回接收到的数据。 需要注意的是,在发送和接收数据之前,需要保证蓝牙连接处于打开和已连接状态。同时,还需要处理异常情况,如设备连接失败、写入数据失败等,可以通过监听蓝牙模块的相关事件来进行处理。 综上所述,小程序可以利用内置的蓝牙功能,通过发送JSON数据的方式与外部设备进行通信。通过获取权限、连接设备、发送数据和接收数据等步骤,可以实现小程序蓝牙设备发送JSON的功能。 ### 回答3: 小程序蓝牙发送JSON可以通过以下步骤实现。 首先,小程序需要通过wx.openBluetoothAdapter()方法打开蓝牙适配器,以便能够与蓝牙设备进行通信。 然后,使用wx.startBluetoothDevicesDiscovery()方法开始搜索附近的蓝牙设备,并在搜索到设备后,使用设备的deviceId和name等信息进行蓝牙连接连接成功后,使用wx.onBLEConnectionStateChange()方法监听蓝牙连接状态变化,并通过wx.createBLEConnection()方法与蓝牙设备建立连接连接成功后,使用wx.writeBLECharacteristicValue()方法向蓝牙设备发送数据。在发送之前,需要将需要发送的JSON转换为二进制数据,可以使用wx.setBLEMTU()设置BLE通道的数据传输最大字节数,以提高传输效率。 发送数据之后,通过wx.onBLECharacteristicValueChange()方法监听蓝牙设备的返回数据,并通过wx.readBLECharacteristicValue()方法来读取设备返回的数据。 最后,断开蓝牙连接可以使用wx.closeBLEConnection()方法,关闭蓝牙适配器可以使用wx.closeBluetoothAdapter()方法。 通过以上步骤,小程序就可以成功向蓝牙设备发送JSON数据了。需要注意的是,不同的蓝牙设备可能有不同的通信协议和数据格式,需要根据具体情况进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值