首页 文章

Nearby Connections 2.0中的错误代码

提问于
浏览
5

我一直在尝试新的Android Nearby Connections v2.0 API . 我的大多数设备现在可以在大多数时间互相交谈,但在尝试连接时我也会收到很多error codes . 在我的程序中检查 status.getStatusCode() ,我可以看到以下返回代码:

  • STATUS_ALREADY_CONNECTED_TO_ENDPOINT(8003)

  • STATUS_BLUETOOTH_ERROR(8007)

  • STATUS_ENDPOINT_IO_ERROR(8012)

  • STATUS_ERROR(13)

我很难理解这些 . 第一个错误代码似乎是不言自明的,除非我在没有达到这些回调的情况下看到记录条目的情况下看到它 . 因此,设备可能在较低级别连接,但如果是这样,则更高级别的代码并不总能听到它 .

我猜测STATUS_BLUETOOTH_ERROR表示记录它的一侧有蓝牙错误,而STATUS_ENDPOINT_IO_ERROR表示另一端有错误(可能涉及蓝牙)?是否有可能获得更多细节?我偶尔看到的STATUS_ERROR(13)状态听起来像是程序员用于那些“WTF,我们永远不会到达这里”的错误代码,但是如果没有访问源代码,我只能猜测 .

请注意,我在其他时间使用相同代码精确地相互通信的设备之间会看到这些错误 . 有时,如果代码重试的次数足够多,它最终会获得稳定的连接 . 有时它会连接并立即从另一端断开连接 . 有时我只是得到了无休止的重复错误消息(STATUS_BLUETOOTH_ERROR和/或STATUS_ENDPOINT_IO_ERROR) .

我正在使用附加连接与连接策略 P2P_CLUSTER . 当双方同时做广告和发现时,这些问题似乎最常发生 . 但是,我写了两个较小的程序,专门从事广告或发现,他们有时也会得到这些错误(但不常见) .

在跟踪消息中,我还注意到来自Nearby Connections的大量警告消息如下所示:

09-04 22:54:40.070 3866-3924/? W/NearbyConnections: Cannot deserialize BluetoothDeviceName: expecting min 16 raw bytes, got 6

我猜这是因为Nearby Connections使用自己的短令牌(如 ZGbx )而不是设备蓝牙名称?我'm not at all sure about that, though. And anyway, if these are Nearby Connections'拥有特殊令牌,那为什么会发出关于它的警告信息呢?

2 回答

  • 0

    [免责声明:我在附近的连接上工作]我可以尝试帮忙 .

    STATUS_ALREADY_CONNECTED_TO_ENDPOINT:如果在与给定 endpoints 有任何挂起(onConnectionInitiated)或已 Build (onConnectionResult)连接时调用'requestConnection',则会发生这种情况 . 将您的日志语句提前移动到onConnectionInitiated,您应该看到我们抛出此错误的原因 .

    STATUS_BLUETOOTH_ERROR:蓝牙出了问题 . 手机可能处于不良状态 . 这(希望)不应该经常发生 . 但是,如果您真的需要修复,请在重新尝试requestConnection之前停止广告和发现 . 附近的连接将在检测到此错误时切换蓝牙,但仅在没有其他任何操作的情况下才会切换 .

    STATUS_ENDPOINT_IO_ERROR:我们失去了与其他设备的连接 . 这可能由于各种原因而发生(它们可能走得太远,蓝牙不稳定,设备停止响应等) . 如果您在连接时发现,请避免这种情况 . 手机上的发现很难,最多会降低带宽,导致连接断线最坏 .

    STATUS_ERROR:出现了其他错误代码不合适的问题 . 这是一个包罗万象的事 . 这通常在onConnectionResult(FAILED)中返回,以通知您onConnectionInitiated之间出现问题并等待双方接受连接 .

    我们还在即将发布的版本中降低了“无法反序列化BluetoothDeviceName”的日志严重性,因为它并不是真正的警告 . 就像你说的那样;我们在发现时看到非邻近连接设备的预期行为 .

    如果您仍然遇到问题,请告诉我们您正在使用的设备,我们一定会将它们添加到我们的测试套件中 .

  • 3

    我只想补充说,在调用API时可能需要一个简短的客户端名称字符串 .

    例如, Nearby.Connections.requestConnection(googleApiClient, shortNameHere,....)

    我一直用UUID.randomUUID() . toString()生成我自己的客户端名称,这似乎导致 STATUS_BLUETOOTH_ERROR . 我所做的只是更改代码示例以使用UUID名称并使用P2P_CLUSTER,我得到了该错误 .

    这是关于 STATUS_BLUETOOTH_ERROR 的解决方案 .

相关问题