yanshouwang / bluetooth_low_energy

A Flutter plugin for controlling the bluetooth low energy.
https://pub.dev/packages/bluetooth_low_energy
MIT License
50 stars 16 forks source link

创建的Advertisement总是上一个 #62

Closed tilongzs closed 5 months ago

tilongzs commented 7 months ago

例如在一个手机创建一个名字为“1”的广播:

final advertisement = Advertisement(
      name: '1',
    );
await PeripheralManager.instance.startAdvertising(advertisement);

几秒后停止广播:

await PeripheralManager.instance.stopAdvertising();
await PeripheralManager.instance.clearServices();

再创建一个名字为“2”的广播,另一个手机通过CentralManager.instance.discovered.listen()搜索到依然是"1“,直到停止广播,再创建一个名字为“3”的广播,另一个手机才搜索到”2“,而不是”3“。重启了也依然如此。

yanshouwang commented 7 months ago

这是个已知问题,安卓上的广播名称来自蓝牙适配器的名称,我在开始广播前设置了蓝牙适配器的名称,但是不会立即生效,也没有任何方式监听适配器名称的改变,所以目前广播会使用上一次设置的名称(第一次会使用蓝牙设置里面的默认名称)

目前没有办法解决这个问题,如果有好的想法可以提出来。

不过由于关于这个问题我能查到的资料相当有限,需要进一步调查。

tilongzs commented 7 months ago

谢谢,我看到了stackoverflow里的讨论。目前通过startAdvertising()后立即stopAdvertising(),再重新startAdvertising()就行了。

yanshouwang commented 5 months ago

有时间可以测试一下 6.0.0 版本下这个问题是否还存在,新版本中名称改为存放在扫描回复中了

我测试了下还是需要重新广播才生效,暂时没有更好的解决方案

今天偶然看到改变蓝牙名称后会有个本地名称改变的广播,感觉可以解决这个问题