你好,请检查从机端的manufacturerData的编码是否正确,确认是否缺少结尾的"="填充符,安卓底层编码允许该填充符的缺失,但是iOS要求是完整的base64编码
wx.onBluetoothDeviceFound advertisData不返回 安卓有返回[图片][图片]
2020-04-13你好,请确认手机蓝牙已打开,如果已打开,请在手机设置-隐私-蓝牙页面确认微信是否已被授权蓝牙
openBluetoothAdapter不能识别蓝牙设备?调取openBluetoothAdapter时候,蓝牙是开启的,但提醒未找到蓝牙设备,请重新打开,目前个别iPhone11和iPhonex中存在该问题,使用的测试是微信小程序官方实例demo[图片]
2020-03-31这里需要openBluetoothAdapter需要加上mode:'peripheral',否则ios无法成功调用从机接口,如下: wx.openBluetoothAdapter({ mode:'peripheral', success:... )} 此处文档未同步,正在修改,可以参考这个示例代码: const uuid1 = '000018F0-0000-1000-8000-00805F9BAAFB' const uuid2 = '00002AF0-0000-1000-8000-00805F9BBBFB' const uuid3 = '00002AF1-0000-1000-8000-00805F9BCCFB' // ArrayBuffer转16进制字符串示例 function ab2hex(buffer) { let hexArr = Array.prototype.map.call( new Uint8Array(buffer), function (bit) { return ('00' + bit.toString(16)).slice(-2) } ) return hexArr.join(''); } function inArray(arr, key, val) { for (let i = 0; i < arr.length; i++) { if (arr[i][key] === val) { return i; } } return -1; } // slave/slave.js Page({ /** * 页面的初始数据 */ data: { connects: [], servers: [] }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { wx.onBLEPeripheralConnectionStateChanged(res => { console.log('ConnectionStateChanged', res) const connects = this.data.connects const idx = inArray(connects, 'deviceId', res.deviceId) if (idx >= 0) { connects[idx] = res } else { connects.push(res) } this.setData({ connects }) }) }, openBluetoothAdapter() { wx.openBluetoothAdapter({ mode: 'peripheral', success: (res) => { console.log('openBluetoothAdapter success', res) this.createBLEPeripheralServer() wx.onBluetoothAdapterStateChange(function (res) { console.log('onBluetoothAdapterStateChange', res.available) }) }, fail: (res) => { if (res.errCode === 10001) { console.log("ble unavailable!") } } }) }, createBLEPeripheralServer() { wx.createBLEPeripheralServer().then(res => { console.log('createBLEPeripheralServer', res) this.data.servers.push(res.server) this.server = res.server this.setData({ serverId: this.server.serverId }) this.server.onCharacteristicReadRequest(res => { const { serviceId, characteristicId, callbackId } = res const buffer = new ArrayBuffer(1) const dataView = new DataView(buffer) const newValue = Math.ceil(Math.random() * 10) dataView.setUint8(0, newValue) console.log('onCharacteristicReadRequest', res, newValue) this.server.writeCharacteristicValue({ serviceId, characteristicId, value: buffer, needNotify: true, callbackId }) }) this.server.onCharacteristicWriteRequest(res => { console.log('onCharacteristicWriteRequest', res) const { serviceId, characteristicId, value, callbackId } = res this.server.writeCharacteristicValue({ serviceId, characteristicId, value, needNotify: true, callbackId }) }) }) }, closeServer() { this.server.close() }, onConfirm(e) { const n = e.detail.value * 1 const buffer = new ArrayBuffer(1) const dataView = new DataView(buffer) dataView.setUint8(0, n) this.server.writeCharacteristicValue({ serviceId: uuid1, characteristicId: uuid2, value: buffer, needNotify: true }) }, showInput() { this.setData({ input: !this.data.input }) }, addService() { const buffer = new ArrayBuffer(2) const dataView = new DataView(buffer) dataView.setUint8(0, 9) dataView.setUint8(1, 11) const descriptorBuffer = new ArrayBuffer(2) const dataView2 = new DataView(descriptorBuffer) dataView2.setInt8(0, 1) dataView2.setInt8(1, 0) const service = { uuid: uuid1, characteristics: [{ uuid: uuid2, properties: { write: false, read: true, notify: true, indicate: false }, permission: { readable: true, writeable: false, readEncryptionRequired: false, writeEncryptionRequired: false }, value: buffer, descriptors: [{ uuid: uuid2, permission: { write: false, read: true }, value: descriptorBuffer }] }, { uuid: uuid3, properties: { write: true, read: false, notify: false, indicate: false }, permission: { readable: false, writeable: true, readEncryptionRequired: false, writeEncryptionRequired: false }, value: buffer, descriptors: [{ uuid: uuid3, permission: { write: true, read: false }, value: descriptorBuffer }] }] } this.server.addService({ service }).then(res => { console.log('add Service', res) }) }, removeService() { this.server.removeService({ serviceId: uuid1 }).then(res => { console.log('removeService', res) }) }, startAdvertising() { const buffer = new ArrayBuffer(1) const dataView = new DataView(buffer) var hex = "7E9" var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16) })) this.server.startAdvertising({ advertiseRequest: { connectable: true, deviceName: '', serviceUuids: [uuid1], manufacturerData: [{ manufacturerId: '0x004c', manufacturerSpecificData: typedArray.buffer }] }, powerLevel: 'higt' }).then(res => { console.log('startAdvertising', res) }, res => { console.log("fail: ", res) }) }, stopAdvertising() { this.server.stopAdvertising() }, closeBluetoothAdapter() { wx.closeBluetoothAdapter() }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { this.data.servers.forEach(server => { // server.close() }) }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })
为什么BLEPeripheralServer. startAdvertising()无法发送成功?我使用下面的代码进行广播的发送,尝试过发送data也尝试过发送sendData,都无法发送成功,接收广播的地方接收不到,是否是我传递serverUuids的方式错误了?是否有发送广播的示例代码可以给我看一下,谢谢! wx.openBluetoothAdapter({ success: function(res) { wx.showToast({ title: '打开蓝牙成功', }); wx.createBLEPeripheralServer({ success: function ({ server }){ const data = ['1111', '1111', '1111', '1111', '1111', '1111', 'A9FF', '54CB', '6F6E', '0BEA', '5173', 'ADEA', '29C6']; const sendData = data.map(str => `0000${str}-0000-1000-8000-00805F9B34FB`); wx.showToast({ title: '创建服务对象成功', }); console.log('dsafasdfadsL:',server); console.log('dsafasdfadsL:', server.startAdvertising); server.startAdvertising({ advertiseRequest: { connectable: false, serviceUuids: data, } }); } }); }, })
2020-03-30