三段码农
三段码农
  • 发布:2020-07-03 14:12
  • 更新:2024-09-15 03:59
  • 阅读:11389

【报Bug】安卓低功耗蓝牙写入时10007,特征无写入权限,IOS正常读写

分类:uni-app

产品分类: 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"  
}
2020-07-03 14:12 负责人:DCloud_Android_zl 分享
已邀请:
1***@163.com

1***@163.com - Grady123

经过各种尝试垂死挣扎终止找到不报10007的方法了,太坑了,在notifyBLECharacteristicValueChange启动成功后再延时写入就可以了

  • 芒果味的秋天

    还是会偶现的,之前就试过延时

    2021-08-16 15:56

  • 前端_小白

    暂时加延时是可以的!!!

    2022-01-11 17:00

  • 3***@qq.com

    这是目前最靠谱的说法了

    2023-06-19 00:58

s***@leaddevelop.net

s***@leaddevelop.net

我们这边解决了,安卓设置MTU时要放在uni.getBLEDeviceServices里才会生效,默认MTU只有20字节,数据超了之后就写入不了,报10007

  • 9***@qq.com

    啥意思啊,咋弄的啊

    2021-05-31 16:18

  • 2***@qq.com

    请问这个是如何解决的?

    2021-06-08 13:45

  • mw515

    具体怎么弄啊 可以贴一下关键代码吗

    2021-06-22 13:46

  • x***@163.com

    老哥,我们也卡在这了,能不能详细说一下怎么解决的?

    2021-06-30 17:08

  • 2***@qq.com

    牛逼,兄弟,百度了一下午,终于解决了,使用这个uni.setBLEMTU(OBJECT)就行了

    2022-09-26 19:33

  • 2***@qq.com

    回复 m***@126.com: uni.setBLEMTU({

    deviceId: deviceId,

    mtu: 512,

    success(res) {

    console.log("设置最大值成功")

    }

    })

    2023-05-15 14:35

三段码农

三段码农 (作者) - 从5+到uniapp,6年开发,一路成长。

愁死了,有人遇到过么,求解答

  • 憨灬憨

    作者解决了嘛,问题一样

    2020-11-05 11:17

三段码农

三段码农 (作者) - 从5+到uniapp,6年开发,一路成长。

官方有人给解答下吗····

6***@qq.com

6***@qq.com - 安徽太湖王者程序员

问题解决没有,我也遇到了

  • 三段码农 (作者)

    没有 每人回复 官方没人管···

    2020-07-10 17:23

三段码农

三段码农 (作者) - 从5+到uniapp,6年开发,一路成长。

到目前仍无解···

  • DCloud_Android_zl

    换个设备可不可以?

    2020-07-15 15:36

  • 三段码农 (作者)

    回复 DCloud_Android_zl: 也不行 苹果手机和微信小程序都没问题

    2020-07-16 14:23

  • DCloud_Android_zl

    回复 三段码农: 延时写入行不行,就是延迟几秒或几分钟试试。

    2020-07-16 15:59

  • 三段码农 (作者)

    回复 DCloud_Android_zl: 没法延时那么久,会自动断开。同事原生安卓代码里除了“服务”和“特征”,还要取个“描述UUID”

    2020-07-16 16:09

  • DCloud_Android_zl

    回复 三段码农: 延时几秒能不能写入成功?

    2020-07-16 17:11

  • 三段码农 (作者)

    回复 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

  • 憨灬憨

    我碰到的也是一样,小程序,ios都没有问题,安卓手机就出现问题

    2020-11-05 10:55

  • 1***@163.com

    小米的也不会,只有华为的会

    2020-11-19 13:39

  • 2***@qq.com

    回复 DCloud_Android_zl: 官方能不能解决啊?这么多人提出的问题,都过去这么久了

    2021-06-21 10:40

1***@qq.com

1***@qq.com

我的问题也是和你一样,采用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}}]。

  • 三段码农 (作者)

    哪个版本?2.8.4+已解决了

    2020-09-16 11:51

  • DCloud_Android_zl

    升级到最新的HBuilderX试一下。

    2020-09-16 11:52

  • 1***@qq.com

    回复 三段码农: 2.8.11 还是一样的

    2020-09-21 09:53

  • 1***@qq.com

    回复 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:513

    2020-11-05 11:10

  • 憨灬憨

    回复 DCloud_Android_zl: 小程序跟ios都不会,安卓手机我试了三台都一样,会出现"errMsg":"writeBLECharacteristicValue:fail property not support","errCode":10007

    2020-11-05 11:12

麦克雷

麦克雷 - 肥比

你好,请问您解决了吗? 我也遇到了这个问题

1***@qq.com

1***@qq.com - fff

解决了吗,我也遇到这个问题

1***@qq.com

1***@qq.com

同问 解决了吗

t***@gmail.com

t***@gmail.com

同样遇到了,这么严重的问题过了几个月都不修复吗?@DCloud_Android_zl,有需要调试么?

电子电脑

电子电脑

我也发现这个问题了, 低版本的 华为可以有:读,写,通知 权限,但同样的APP 放到高版本的华为机器上,就没有写权限,即使提示有,也写入失败!有想一起探讨的,加4773050 “q”说明 BLE读写

  • t***@gmail.com

    我放弃了,用原生开发了,怕有其他坑。

    2020-12-02 10:10

2***@qq.com

2***@qq.com - 小博

同问

1***@qq.com

1***@qq.com

解决了吗?同问

麦克雷

麦克雷 - 肥比

这个问题大家不要纠结了,自己做重发可以解决

  • BugEngineer

    重发也会失败 ~您是重发了多久或者多少次

    2021-01-16 12:02

这不是我没有

这不是我没有

同问?有什么解决方案吗?3.0.5一样有此问题

ghostyu

ghostyu

HBuilder 3.1.2 版本依然有这个问题,已经排除了蓝牙芯片的问题,app连接芯片10次,差不多有3次会有这个问题

{  
  "errMsg": "writeBLECharacteristicValue:fail property not support",  
  "errCode": 10007,  
  "code": 10007  
}
mcq

mcq

现在我也遇到相同问题了,获取到特征有写入权限,但是一直提示写入失败,errCode 10007

  • 5***@qq.com

    这个问题现在解决了没有

    2022-10-21 11:58

芒果味的秋天

芒果味的秋天

这问题到现在还有啊,我佛了。微信小程序可以的,现在uniApp 还得加延时,为啥呢????

7***@qq.com

7***@qq.com

有解决这个问题的大佬吗,uniapp各种坑,解决一个还有一个,不定时出现烦人的很

2***@qq.com

2***@qq.com - 小博

有解决这个问题的大佬吗?

s***@leaddevelop.net

s***@leaddevelop.net

我也遇到了这个问题,苹果手机没问题,安卓手机有这个问题 10007

mw515

mw515

请问解决了吗?

1***@qq.com

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)  
      },  
    })
  • 两个纠缠之缘

    能完全解决吗 我这边有时候还是会出现

    2021-09-24 15:07

7***@qq.com

7***@qq.com

我的解决方法比较暴力,如果写入报错的话,就看是不是有多条特征码可用,如果有的话就循环尝试不同的特征码写入,如果循环完还不行就断开重新连接重新获取服务和特征码。。。

进击的大哥

进击的大哥 -

同求,目前测试好像是华为(麒麟芯片)机型有问题

抱米花

抱米花

执行第一次可以,在执行一次就报错10007,这是什么原因呀,哪位大佬晓得呀

  • xiaoxuDclud

    请问最后解决没有呢?我现在遇到一样的问题

    2023-12-12 15:04

l***@163.com

l***@163.com

@DCloud_Android_zl 3.2.16版本,Android设置mtu后,报10007概率非常高,不设置mtu也会偶尔出现,这个到底是什么问题?

3***@qq.com

3***@qq.com

遇到了同样的问题,编译androidAPP不稳定,数据传输偶尔报错,小程序上正常,这个问题官方还没有解决吗。。。。。

s***@163.com

s***@163.com

楼里有小伙伴解决的吗?我这边时而出现。
{
"errMsg": "writeBLECharacteristicValue:fail property not support",
"errCode": 10007,
"code": 10007
}

牛牛2021

牛牛2021

解决了吗?遇到同样问题,安卓经常出现这样的情况,IOS 比较顺畅?!!

2wu2

2wu2

这个问题有解决了吗? 华为手机鸿蒙3.x的系统基本10次有9次失败。~

  • 6***@qq.com

    加延时

    2022-12-21 15:25

  • dlsm

    回复 6***@qq.com: 请问一下加多少延时就不会报10007错误呢

    2023-01-09 09:43

7***@qq.com

7***@qq.com

我也遇到了这个问题,HbuilderX版本是3.6.5

1***@qq.com

1***@qq.com

我也遇到了这个问题,这个问题有解决方案么@DCloud_Android_zl

求求求

求求求

老哥解决了吗

  • 1***@qq.com

    没有,官方也没啥说明的。搞这种硬件交互的还是尽量搞原生吧,这个框架不是很友好

    2023-09-18 14:33

m***@163.com

m***@163.com

3年了都么有解决这个问题,我目前3.8.12都经常出现10007,难顶啊

c***@foxmail.com

c***@foxmail.com

我是Android和ios原生没问题,小程序端Android没问题,但是ios小程序写入时提示10007,没办法解决啊

3***@qq.com

3***@qq.com

测试蓝牙打印机,把可写的每个特征值都试了下,发现有些特征值安卓会失败,加延迟会成功,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)  
            },  
        });  
    })  
}
c***@outlook.com

c***@outlook.com

问题解决了没? 我也遇到了

  • 1***@163.com

    我这边遇到的问题是循环调用向蓝牙写入数据,但是在整个过程中可能会有一半的命令发送失败提示100007.所以我就在for循环里面写了个promise,如果发送成功就resove,如果失败就继续发当前这条数据,直到发送成功。然后问题就解决了。也不用担心发送的数据会乱

    2024-04-10 15:15

1***@163.com

1***@163.com

我这边遇到的问题是循环调用向蓝牙写入数据,但是在整个过程中可能会有一半的命令发送失败提示100007.所以我就在for循环里面写了个promise,如果发送成功就resove,如果失败就继续发当前这条数据,直到发送成功。然后问题就解决了。也不用担心发送的数据会乱

2***@qq.com

2***@qq.com

试过使用setBLEMTU,甚至mtu设置不。后面是去修改writeType的值才正常使用。
文档writeBLECharacteristicValue,有个writeType参数(蓝牙特征值的写模式设置,有两种模式,iOS 优先 write,安卓优先 writeNoResponse 。微信小程序支持),一开始是安卓使用writeNoResponse,后面直接就不做区分了,都是用write就可以。

  • 2***@qq.com

    试了下 没用 还是会报10007

    2024-08-05 17:41

  • 2***@qq.com

    我这个设备频繁发送是偶发这个错误,出现错误的话 我再延时重新发送,感觉这个错误和物理设备关系很大。

    2024-08-05 17:43

6***@qq.com

6***@qq.com

目前已解决,自己维护一个buffer队列,每次写入限制20长度,写入成功移除队头,写入失败重试,然后看队列是否有数据,继续执行,新来的数据添加到队尾

要回复问题请先登录注册