Flutter Blue 示例无法通过扫描我的蓝牙 PC、其他 Android 手机和 iOS 找到

Pau*_*aul 6 dart bluetooth-lowenergy flutter

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);
}
  }
Run Code Online (Sandbox Code Playgroud)

示例应用程序执行其缓冲动画并在未找到设备的情况下停止。

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

Ban*_*eil 1

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

显然,颤动蓝色的缩小存在问题。有两种方法可以解决该问题,如本期所列: https: //github.com/pauldemarco/flutter_blue/issues/662

在 android/app/build.gradle 中你可以禁用 minifaction:

android {
    ...
    buildTypes {
        release {
            signingConfig signingConfigs.debug
            shrinkResources false
            minifyEnabled false
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

并使用以下内容在 android/app/proguard-rules.pro 创建一个文件:

-keep class com.pauldemarco.flutter_blue.** { *; }
Run Code Online (Sandbox Code Playgroud)