【问题标题】:Nearby Connections 2.0: Advertiser restarts, but Discoverer connects using old Advertiser idNearby Connections 2.0:广告商重新启动,但 Discoverer 使用旧的广告商 ID 进行连接
【发布时间】:2017-10-11 00:03:17
【问题描述】:

我发现了一个有趣的结果

  • 广告商公布了其端点 ID 'wjys'
  • 发现者请求连接到“wjys”
  • 广告商重新启动(stopAllEndpoints,断开与 GoogleApiClient 的连接)
  • 广告商公布了其新的端点 ID 'PChU'
  • Discoverer 再次发现 Advertiser (id=PChU)
  • Discoverer 使用旧 ID (wjys) 获取 onConnectionInitiated
  • 两个设备都接受
  • 令人惊讶的是,即使 Discoverer 使用旧的广告商 ID (wjys) 发送和接收消息,这两个设备仍然可以通信。

这种行为是错误吗?

【问题讨论】:

    标签: android bluetooth google-nearby


    【解决方案1】:

    这是一个错误。我已经在内部提交了一张票以修复它。如果您停止投放广告,那么任何看过旧广告的人都不应联系到您。如果您发现任何其他类似这样的奇怪边缘情况,请告诉我们! :)

    要了解为什么会发生此错误,以下是有关 Connections 工作原理的一小部分: 端点 id 作为广告的一部分发送,它在 Discoverer 端形成一个 id-mac 地址对。当发现者被告知“requestConnection”时,它会尝试连接到与端点 ID 关联的 Mac 地址。如果设备已经停止广播,发现者将无法连接,但发现者会在内部重试几次以确保确定。如果广告主重新启动广告的速度足够快,它会再次变得可连接,并且发现者的重试可能会成功(因为蓝牙 mac 地址永远不会轮换)。即使广告不同也是如此。

    【讨论】:

    • 这在 Google Play 服务 11.6.0 中是否已修复?另外,我注意到 11.6.0 发行说明提到了一个新的“ConnectionsClient”类。我应该尝试使用它吗?有帮助吗?
    • 不,修复将在未来的版本中。当修复程序公开时,我会更新答案,但这需要相当长的时间。
    • 关于 ConnectionsClient:请使用它,因为它会使您的代码更加简单(不再有 GoogleApiClient.connect() 逻辑),但它不会修复任何错误。
    • 太棒了!您是否正在考虑提供任何示例代码?我能为 ConnectionsClient 找到的唯一文档是:developers.google.com/android/reference/com/google/android/gms/…
    • 是的,WalkieTalkie 将在本周的某个时候更新。还有另一个(更简单的)示例应用程序也应该尽快上传。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多