【发布时间】:2017-09-04 11:37:34
【问题描述】:
我一直在试验新的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)
我很难理解这些。第一个错误代码似乎不言自明,除了我在所谓的连接的任一侧没有使用“SUCCESS”返回代码点击 onConnectionResult 回调的情况下看到它。我当前的代码充满了跟踪语句,如果已经达到这些回调,我会看到日志条目。所以也许设备在某个较低级别连接,但如果是这样,较高级别的代码并不总是听到它。
我猜 STATUS_BLUETOOTH_ERROR 表示记录它的一侧的蓝牙错误,而 STATUS_ENDPOINT_IO_ERROR 表示另一端的错误(可能涉及蓝牙)?是否有可能获得更多详细信息? 我偶尔看到的 STATUS_ERROR (13) 状态听起来像是程序员在那些“WTF,我们永远不应该到达这里”的时刻使用的那种错误代码,但如果无法访问源代码,我只能猜测。
请注意,我在使用相同代码的设备之间看到了这些错误,这些设备在其他时间可以很好地相互通信。有时,如果代码重试了足够多的时间,它最终会获得稳定的连接。有时它会连接并立即与另一端断开连接。有时我会收到无穷无尽的重复错误消息(STATUS_BLUETOOTH_ERROR 和/或 STATUS_ENDPOINT_IO_ERROR)。
我正在使用具有连接策略P2P_CLUSTER 的附近连接。当双方都做广告和发现时,这些问题似乎最常发生。但是,我编写了两个专门用于广告或发现的较小程序,它们有时也会出现这些错误(但不太常见)。
在跟踪消息中,我还注意到来自附近连接的许多警告消息,如下所示:
09-04 22:54:40.070 3866-3924/? W/NearbyConnections: Cannot deserialize BluetoothDeviceName: expecting min 16 raw bytes, got 6
我猜这是因为 Nearby Connections 使用自己的短令牌(如ZGbx)而不是设备蓝牙名称?不过,我对此完全不确定。无论如何,如果这些是 Nearby Connections 自己的特殊令牌,那么它为什么会发出有关它的警告消息?
【问题讨论】:
标签: android bluetooth google-nearby