收藏
回答

关于Android连接低功耗蓝牙慢的问题

问题模块 框架类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 wx.createBLEConnection 客户端 Android 最新版 1.9.1

一、场景:

目前正在做一个小程序连接低功耗蓝牙板的功能。主要是用于硬件操作类。

二、描述:

1、使用完后,发现Android版本小程序在wx.createBLEConnection(OBJECT)下api不太稳定。连接时长有时候快,有时候慢。快的时候能达到正常的理想速度(1-1.5秒),慢的话能达到5-10秒。


尝试使用Android原生app,使用

BluetoothGatt mBluetoothGatt = mDevice.connectGatt(this.mContext, true, this);

进行连接,发现并没有达到小程序那么大的概率出现连接慢的问题。小程序连接蓝牙慢的概率会在10%左右,而使用原生app连接的话,最多2%左右,甚至更低。

不过原生app在尝试断开蓝牙后,有进行释放BluetoothGatt对象,如下

public void disconnect(){

        mBluetoothGatt.disconnect();

        mBluetoothGatt.discoverServices();

        mBluetoothGatt.close();

        mBluetoothGatt = null;

}

多次尝试直接不释放BluetoothGatt对象的前提下,只是单纯的

mBluetoothGatt.disconnect();

下次连接直接mBluetoothGatt.connect();

同样会出现和小程序一样的大概率连接慢,甚至连不上的问题。

PS:蓝牙板的广播频率已经调成50毫秒一下了



2、第二个问题:连接蓝牙了,进行写动作,有延时200毫秒左右开始写特征值数据,经常会10008错误,不让写。而且调用wx.closeBLEConnection(OBJECT)会出现无法断开的现象,实际蓝牙还处在和手机连接中。此时无论如何操作都无法断开蓝牙,只能选择结束微信进程。


以上问题在IOS上未出现。


三、建议

希望小程序开发团队能抽空看下低功耗蓝牙的这个问题,我相信很大部分开发者在Android上都基本头大无助了,转而放弃小程序使用原生app去了,这是很遗憾的一件事。





最后一次编辑于  2018-02-09
回答关注问题邀请回答
收藏

12 个回答

  • Tummy
    Tummy
    2018-02-09

    感谢反馈!

    1.

    这里的意思是不释放的前提下,反而大概率连接慢,连不上吗?

    小程序closeBleConnection接口是有释放资源的.


    2.

    原生app会有这样的现象吗?


    最近安卓低功耗蓝牙也在做调整,争取年后第一个版本更新,方便留下微信,我们一起来调一下修改完的效果是否达到预期,感谢。

    2018-02-09
    赞同
    回复
  • 🍭
    🍭
    2018-03-26

    安卓的死也连接不上打印机,ios的却可以。感觉被市面上的demo给忽悠了,解决了好些日子,只差放弃了

    2018-03-26
    赞同
    回复
  • 此去经年
    此去经年
    2018-03-15

    请问楼主,我这边测试小米android的手机调 writeBLECharacteristicValue 没有一次成功的,但在IOS上都是成功的。


    2018-03-15
    赞同
    回复
  • Achen
    Achen
    2018-03-06

    写了大半年的蓝牙,小程序问题最大的就是出在这个两个方法上:

    1. wx.createBLEConnection();

    2. wx.closeBLEConnection()。

      连接速度不稳定,android大多数情况都是好几秒后才连接成功,大大的影响到了用户的体验。

      android的wx.closeBLEConnection断开不及时,每次执行该方法后,设备没有正常断开。

      就因为这两点无数小程序开发者伤透了脑筋。

    2018-03-06
    赞同
    回复 1
    • &
      &
      2018-11-26

      我这里一是断开蓝牙连接 失败

      2018-11-26
      回复
  • 包磊 Baolei
    包磊 Baolei
    2018-02-13

    @陈斌

    手动给测试点个👍

    2018-02-13
    赞同
    回复
  • 陈斌
    陈斌
    2018-02-13

    @包磊 Baolei

    人为点的。这玩意还搞啥自动化呐~

    我这边是已经有现成的成型的app了的,只是现在接到需求要做小程序版的。使用人群和人数不大,10-20万人的场景就行了。基本没啥性能方面的特殊要求。比较偏门的一个东西

    2018-02-13
    赞同
    回复
  • 包磊 Baolei
    包磊 Baolei
    2018-02-13

    @陈斌

    你说的200次测试,是自动化完成的?

    你的测试如果是自动化完成的,那就是压力测试,10是测试间隔(压力测试的一个参数)。。。测试间隔对压力测试有影响的。

    2018-02-13
    赞同
    回复
  • 陈斌
    陈斌
    2018-02-13

    @包磊 Baolei

    10秒这不是我这边的需求,2秒是瓶颈,1秒内就得连上蓝牙并且交互了。否则只能换原生app

    2018-02-13
    赞同
    回复
  • 包磊 Baolei
    包磊 Baolei
    2018-02-13

    @陈斌

    1、测试case就是扫连测试吧?可以看一下HCI日志,分析一下慢的原因:微信小程序测试和原生App测试的HCI都分析一下,估计可能有小程序HCI日志里会有和原生HCI日志不同的东西

    2、毫秒级这个有点夸张吧?蓝牙连接间隔你们定的是毫秒级么?那功耗问题可要考虑了。

    3、小米2我测过,性能还不错,也出现了问题么?我提供一下我的测试参数,你看一下:开扫,扫到后停扫,调用连接,连接成功后,各种指令通信,然后调用断开,等10s,再开扫,循环测试N次。方便提供一下你的参数交流一下么?

    4、closeBleConnection没有断开的情况,社区里很早就有人提过了,估计小程序SDK没改彻底吧?这个只能微信自己改了


    PS:关键还是分析HCI日志,没准能发现硬件的Bug呢?

    2018-02-13
    赞同
    回复
  • 陈斌
    陈斌
    2018-02-13

    @包磊 Baolei

    1、连接时长是根据wx.createBLEConnection()

    接口从调用开始计时到结束complete的时长。这个时长并不是说每次都慢,而是一定的概率出现慢。

    2、一旦连接成功success回调之后,呐就很快了。到notify可写的特征值都是毫秒级的,基本就是瞬间完成。

    3、目前测试的手机有古董级别的三星S4、小米2。高端机也就是各品牌的旗舰机了。速度上旗舰机确实是会比古董机好很多很多。

    4、针对closeBleConnection有时候无法断开连接的情况,让硬件工程师搞定了,连接上设备1秒内不进行指令交互,直接断开了。不过这个办法是这边需求刚好可以这么做。


    PS:判断不是手机的问题的依据是使用原生app进行多次连接测试,每次安排测试次数>=200次连接以上。


    这次反馈的问题点,并不是一定每次连接都速度慢,是有一定的概率出现,而且较大的概率。对比使用原生app后这种连接慢的概率会低很多。我这边是有单独做了一个原生Android版本的demo给同事们测的,测试结果是也会有概率出现连接慢。但是不会和小程序一样的大概率。小程序概率大概会在10%左右,而使用原生app概率会在2-3%之间。



    2018-02-13
    赞同
    回复

正在加载...