首页 > 解决方案 > Flutter Blue 示例无法通过扫描我的蓝牙 PC、其他 Android 手机和 iOS 进行查找

问题描述

Flutter Blue 无法找到我所有运行他们提供的示例应用程序的蓝牙设备。不显示错误消息。蓝牙适配器打开,所有设备都兼容 BLE。

https://gyazo.com/27f907034570f860997026ed295be026

我已经尝试通过外部 Android 工具配对设备并在不配对的情况下进行测试。未显示任何设备。

_Scan() {
print('STARTED');

if (!isScanning) {
  print('SCANNING');
  setState(() { isScanning = true; });
  scanSubscription = flutterBlue.scan().listen((scanResult) {
    print('Scan Result');
    print('localName: ${scanResult.advertisementData.localName}');
    print(
        'manufacturerData: ${scanResult.advertisementData
            .manufacturerData}');
    print('serviceData: ${scanResult.advertisementData.serviceData}');
  }, onDone: _StopScan);
}
  }

示例应用程序执行其缓冲动画和未找到设备的停止。

预期的行为是查找设备并将它们作为列表打印在主应用程序屏幕上。

标签: dartflutterbluetooth-lowenergy

解决方案


在带有 --release 标志的设备上进行测试时,我遇到了这个问题。

显然,flutter blue 的缩小存在问题。有两种解决问题的方法,如本期所列:https ://github.com/pauldemarco/flutter_blue/issues/662

在 android/app/build.gradle 你可以禁用缩小:

android {
    ...
    buildTypes {
        release {
            signingConfig signingConfigs.debug
            shrinkResources false
            minifyEnabled false
        }
    }

或者您可以创建一个防止flutter_blue最小化的proguard规则:在android/app/build.gradle中:

android {
    ...
    buildTypes {
        release {
            signingConfig signingConfigs.debug
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
        }
    }

并在 android/app/proguard-rules.pro 中创建一个文件,其中包含以下内容:

-keep class com.pauldemarco.flutter_blue.** { *; }

推荐阅读