首页 > 解决方案 > 伙计们关于如何在 Flutter(Android)中获取 BluetoothDevice 的硬件地址的任何想法。我正在使用 FlutterBlue

问题描述

我正在尝试获取当前设备的蓝牙地址,该地址应该在我运行蓝牙扫描时显示为其他设备的 ID。知道我该怎么做吗?

标签: flutterbluetooth

解决方案


我不太明白您是要使用 FlutterBlue 查找要连接的蓝牙设备,还是希望您的设备可以访问。

因此,让我们讨论这两种选择。

查找其他设备

使用 FlutterBlue,您可以查找设备并连接到它们,因此假设它们是可访问的,您需要首先实例化您的 FlutterBlue,然后扫描设备:

FlutterBlue flutterBlue = FlutterBlue.instance;
flutterBlue.startScan(timeout: Duration(seconds: 4));

此扫描方法将创建一个类似流的对象,您需要订阅该对象才能获得结果:

var subscription = flutterBlue.scanResults.listen((results) {
    // do something with scan results
    for (ScanResult r in results) {
        print('${r.device.name} found! rssi: ${r.rssi}');
    }
});

// You could stop the scan as well, after finding what you need or just got every device on the list
flutterBlue.stopScan();

为什么我要查找的设备无法访问?
这有两个可能的原因:

  1. 该设备没有暴露其蓝牙连接,因此其他设备无法访问它。您需要打开蓝牙,并确保它允许可达性(这是操作系统配置,在设备设置上)
  2. FlutterBlue 只返回未连接的设备,因此如果您已经连接到设备,那么您将不会在扫描时获得名称。

让我的设备可被发现

根据我的经验,FlutterBlue 不支持更改蓝牙状态,或更改设备对其他设备的可发现性。我建议寻找替代解决方案。

对包进行快速搜索,我发现这个可能有效,但我还没有测试可以肯定地告诉你: https ://pub.dev/documentation/flutter_bluetooth_serial/latest/

额外:查找我的设备 ID

如果你想找到你的设备 ID,这个库device_info可以提供帮助。检查此线程以获取有关实施的完整概述: https ://stackoverflow.com/a/49187284/10642035


推荐阅读