资讯专栏INFORMATION COLUMN

【解决问题】FlutterBlue在安卓手机上无法连接蓝牙设备,扫描缓慢

robin / 1989人阅读

摘要:现在的在安卓手机上很难搜索连接,在上是没问题的,进行下列更改可以快速修复这个问题,但是会损失掉一些功能,不能通过指定的搜索到设备因为数组被改成了。本文禁止任何类型转载

现在的FlutterBlue在安卓手机上很难搜索连接,在iOS上是没问题的,进行下列更改可以快速修复这个问题,但是会损失掉一些功能,不能通过指定Service的UUID搜索到设备(因为uuids数组被改成了[])。

懒人可以直接用我fork之后修改的版本,修改YML文件的flutter_blue地址如下:

  flutter_blue: 
    git: 
      url: git://github.com/mjl0602/flutter_blue.git

If you can’t use flutterblue connect device with Android Phone. You can try low version Api of Android. These apis are deprecated but worked very well in some Android Phone. These
Phones are bad support with new API: you can call the function successful, but scan and connect will be very slow and easy connect fail. To solve this problem, change file:
android/src/main/java/com/pauldemarco/flutterblue/

see new file on: https://github.com/mjl0602/fl...

This change didn"t solve this problem completely. To solve this problem, must add new args to control the api version. but not use Build.VERSION.SDK_INT. It"s works bad.

简单的说,就是很多手机系统到了新版本,但是对新版本的硬件API支持的很差,强制换成老版本的用法就好了。希望作者加一个字段来控制具体用什么版本的API来搜索。

Change connect way.

// old code,hardly connect device on Red Mi Note 4 
// BluetoothGatt gattServer = device.connectGatt(registrar.activity(), options.getAndroidAutoConnect(), mGattCallback);

// improve MI phone connect speed. If didn"t call connect,Mi phone can"t connect success
BluetoothGatt gattServer = device.connectGatt(registrar.activity(), false, mGattCallback);
gattServer.connect();

Use old version api

// use old version api
private void startScan(MethodCall call, Result result) {
    byte[] data = call.arguments();
    Protos.ScanSettings settings;
    try {
        settings = Protos.ScanSettings.newBuilder().mergeFrom(data).build();
        // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //     startScan21(settings);
        // } else {
            startScan18(settings);
        // }
        result.success(null);
    } catch (Exception e) {
        result.error("startScan", e.getMessage(), e);
    }
}

private void stopScan() {
    // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    //     stopScan21();
    // } else {
        stopScan18();
    // }
}

Remove uuids arg.

// boolean success = mBluetoothAdapter.startLeScan(uuids, getScanCallback18());
boolean success = mBluetoothAdapter.startLeScan(getScanCallback18());
本文禁止任何类型转载

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72741.html

相关文章

  • 【开发技巧】再见,BLE的那些坑!

    摘要:项目中用到模块时,要注意以下问题用示例代码安卓系统扫描蓝牙设备就无法成功,而苹果则没问题。安卓和苹果的设备不一样,安卓为格式,苹果为格式。 蓝牙,平常你用的多吗?上班路上戴着蓝牙耳机听音乐、看视频打开蓝牙分享个人热点给小伙伴们解锁共享单车时,打开蓝牙就能迅速解锁...... BLE—蓝牙低能耗技术,方便了我们的生活,但是开发者在开发过程中却遇到了不少坑,尤其对小白用户来说坑真的太多了,...

    Bmob 评论0 收藏0
  • HC-05/06蓝牙模块的原理及使用方法

    摘要:二模块原理蓝牙模块的通信示意图如下两个设备主控芯片或单片机分别连接各自的蓝牙模块,即将主控芯片与蓝牙模块的串口控制引脚交叉连接。如图注蓝牙模块自带转电路。注博主演示的蓝牙模块虽然不是,但是功能和一样。 ...

    young.li 评论0 收藏0
  • YOOGA 40蓝牙双模焊接PCB简要说明

    摘要:键盘使用说明索引均为出厂默认值升级固件软件支持一些常见问题解答电池开关电池插座转接小板连接首次使用测试步骤蓝牙和切换键盘默认层默认触发层的键配置的功能默认功能层配置的功能默认的快捷键蓝牙配对蓝牙参数蓝牙地址管理升级固件 ...

    不知名网友 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<