收藏
回答

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

框架类型 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去了,这是很遗憾的一件事。





回答关注问题邀请回答
收藏

12 个回答

  • 包磊 Baolei
    包磊 Baolei
    2018-02-13

    @陈斌

    1、连接时长是怎么统计的,扫描到设备后,再调用连接,然后等待成功回调么?还是直连?

    2、连接成功之后,扫服务、扫特征,然后notify,那么notify之前,你延时了多少?这个也是需要延时的。

    write之前的延时官方文档已经说明了,按照你现在的参数就行。

    3、测试用的手机型号能分享一下么?你怎么确定不是手机的问题?我的经验是中高端CPU(比如各品牌的旗舰机)会好一点,低端的CPU会差。

    2018-02-13
    有用
    回复
  • Cooky
    Cooky
    2018-02-11

    微信ID:only_cooky

    1、closeBleConnection后再连接并没有达到原生app那样的正常速度,依然是大概率出现连接慢。

    2、用原生app针对低功耗蓝牙写了测试demo,各种测试(释放资源、写死特征值...)得出的结论是:原生app也会出现连接不稳定的现象,但是概率不会小程序这么高。对比下,原生app一般平均30次会有1次超过3秒。而小程序差不多10次就会有一次。

    3、另外就是关于特征值的问题,其实特征值完全可以写死的,比如我们做的这批板子,都会跟硬件工程师沟通好,硬件特征值一定是一模一样的。目前小程序是一定要调用api获取一遍才可以notify特征值。


    2018-02-11
    有用
    回复

正在加载...

登录 后发表内容