写二进制输入提示无权限
- 发布:2020-07-03 14:12
- 更新:2024-09-15 03:59
- 阅读:11389
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 10
HBuilderX类型: 正式
HBuilderX版本号: 2.7.14
手机系统: Android
手机系统版本号: Android 9.0
手机厂商: 华为
手机机型: 三部不同型号的华为
页面类型: vue
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
正常写入
正常写入
实际结果:
无权限
无权限
bug描述:
再开发低功耗蓝牙时,发现同样代码,再苹果app端正常,小程序IOS和安卓也正常,但在安卓APP端写入二进制数据时出错
{
"errMsg": "writeBLECharacteristicValue:fail property not support",
"errCode": 10007
}
读到的characteristics是有写权限的
{
"characteristics": [{
"uuid": "000003F0-0000-1000-8000-00805F9B34FB",
"properties": {
"read": true,
"write": true,
"notify": true,
"indicate": true
}
}],
"errMsg": "getBLEDeviceCharacteristics:ok"
}
1***@163.com - Grady123
经过各种尝试垂死挣扎终止找到不报10007的方法了,太坑了,在notifyBLECharacteristicValueChange启动成功后再延时写入就可以了
我们这边解决了,安卓设置MTU时要放在uni.getBLEDeviceServices里才会生效,默认MTU只有20字节,数据超了之后就写入不了,报10007
三段码农 (作者) - 从5+到uniapp,6年开发,一路成长。
到目前仍无解···
-
三段码农 (作者)
回复 DCloud_Android_zl: 刚试了下 开启uni.notifyBLECharacteristicValueChange后,加上延迟超过300毫秒蓝牙就断开了,求帮助
2020-07-17 10:46
-
三段码农 (作者)
回复 DCloud_Android_zl: 老大可以看下这个 https://ask.dcloud.net.cn/question/101191?item_id=132458&rf=false 会不会有关
2020-07-17 11:15
我的问题也是和你一样,采用plus.Bluetooth 来操作也是一样的,特征值是可以写入的[{"uuid":"0000FEE2-0000-1000-8000-00805F9B34FB","properties":{"read":false,"write":true,"notify":false,"indicate":false}},{"uuid":"0000FEE1-0000-1000-8000-00805F9B34FB","properties":{"read":false,"write":false,"notify":true,"indicate":false}}]。
-
回复 DCloud_Android_zl: 最新版本依然出现此问题,用uni或plus.Bluetooth,操作都会如此,只有安卓系统才会出现这样
2020-09-21 09:55
-
回复 DCloud_Android_zl: 2.9.3的版本也是一样的,获取到的characteristicId是true,writeBLECharacteristicValue()里面有成功有失败成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.228 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.248 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.268 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.288 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.308 失败{"errMsg":"writeBLECharacteristicValue:fail property not support","errCode":10007} at pages/myCenter/blueTooth/newBluetooth.js:531
11:05:57.328 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.348 失败{"errMsg":"writeBLECharacteristicValue:fail property not support","errCode":10007} at pages/myCenter/blueTooth/newBluetooth.js:531
11:05:57.368 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.388 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.408 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:513
11:05:57.428 成功{"errMsg":"writeBLECharacteristicValue:ok"} at pages/myCenter/blueTooth/newBluetooth.js:5132020-11-05 11:10
-
回复 DCloud_Android_zl: 小程序跟ios都不会,安卓手机我试了三台都一样,会出现"errMsg":"writeBLECharacteristicValue:fail property not support","errCode":10007
2020-11-05 11:12
HBuilder 3.1.2 版本依然有这个问题,已经排除了蓝牙芯片的问题,app连接芯片10次,差不多有3次会有这个问题
{
"errMsg": "writeBLECharacteristicValue:fail property not support",
"errCode": 10007,
"code": 10007
}
1***@qq.com - 被遗忘的程序员
我知道了,分享出来把。
部分手机报10007
uni.writeBLECharacteristicValue({
deviceId: _deviceId,
serviceId: _serviceId,
characteristicId: _characteristicId,
value: buffer,
success(res) {
setTimeout(() => {
realWriteData(sendloop, i + 1);
}, 10);//就是这里需要加延时,具体原因不清楚,等大神解释吧
},
fail (res) {
console.log(res)
},
})
楼里有小伙伴解决的吗?我这边时而出现。
{
"errMsg": "writeBLECharacteristicValue:fail property not support",
"errCode": 10007,
"code": 10007
}
测试蓝牙打印机,把可写的每个特征值都试了下,发现有些特征值安卓会失败,加延迟会成功,settimeout(100),但是打印的时候一卡一卡的,比较慢。问了下厂商,可能是uni不支持长特征值。于是就过滤了一下服务。
在网上找的文章
“每一个服务、特征、描述符都有一个UUID作为唯一识别符,识别符有通用的,也可以自定义,也可以随机生成,固定格式00000000-0000-0000-0000-000000000000(8-4-4-4-12),一般来说自定义的UUID只有前8位有变化,后面的基本是固定的0000-1000-8000-00805f9b34fb,所以一个自定义的UUID一般看起来就像这样 “0000???-0000-1000-8000-00805f9b34fb” 通配符就表示4个16进制数。”
通过固定值0000-1000-8000-00805f9b34fb过滤服务,再去找可以读,写,通知的特征值。ios和android测试正常。
export const getBLEDeviceServices = (deviceId) => {
return new Promise((resolve, reject) => {
uni.getBLEDeviceServices({
deviceId,
success: async (res) => {
console.log("getBLEDeviceServices success", res.services);
const services = res.services.map(item => item.uuid).filter(item => item.toUpperCase().includes('0000-1000-8000-00805F9B34FB'));
const {readServiceId, readId} = await getBLEDeviceReadCharacteristic(deviceId, services)
const {nodifyServiceId, notifyId} = await getBLEDeviceNotifyCharacteristic(deviceId, services)
const {writeServiceId, writeId} = await getBLEDeviceWriteCharacteristic(deviceId, services)
resolve({readServiceId, readId, nodifyServiceId, notifyId, writeServiceId, writeId})
},
fail: async (error) => {
console.error(error);
await closeBLEConnection(deviceId);
reject(error)
},
});
})
}
问题解决了没? 我也遇到了
我这边遇到的问题是循环调用向蓝牙写入数据,但是在整个过程中可能会有一半的命令发送失败提示100007.所以我就在for循环里面写了个promise,如果发送成功就resove,如果失败就继续发当前这条数据,直到发送成功。然后问题就解决了。也不用担心发送的数据会乱
芒果味的秋天
还是会偶现的,之前就试过延时
2021-08-16 15:56
前端_小白
暂时加延时是可以的!!!
2022-01-11 17:00
3***@qq.com
这是目前最靠谱的说法了
2023-06-19 00:58