Nearby Connections 2.0 中的错误代码
Error codes in Nearby Connections 2.0
我在尝试连接时一直在试验新的 Android Nearby Connections v2.0 API. Most of my devices can now talk to each other most of the time, but I also get a lot of error codes。在我的程序中检查 status.getStatusCode()
,我可以看到以下 return 代码:
- STATUS_ALREADY_CONNECTED_TO_ENDPOINT (8003)
- STATUS_BLUETOOTH_ERROR (8007)
- STATUS_ENDPOINT_IO_ERROR (8012)
- STATUS_ERROR (13)
我很难理解这些。第一个错误代码 似乎 不言自明,除了我在没有使用 "SUCCESS" return 代码点击 onConnectionResult 回调的情况下看到它所谓连接的一侧。我当前的代码充满了跟踪语句,如果已达到这些回调,我会看到日志条目。所以也许设备在较低级别连接,但如果是这样,较高级别的代码并不总是听到它。
我猜 STATUS_BLUETOOTH_ERROR 表示记录它的一侧存在蓝牙错误,而 STATUS_ENDPOINT_IO_ERROR 表示另一端存在错误(可能涉及蓝牙)?是否有可能获得更多细节?
我偶尔看到的 STATUS_ERROR (13) 状态听起来像是程序员在那些 "WTF, we should never get here" 时刻使用的那种错误代码,但在没有访问源代码的情况下,我只能猜测。
请注意,我在使用相同代码的其他时间彼此完美通信的设备之间看到了这些错误。有时,如果代码重试足够多次,它最终会获得稳定的连接。有时它会连接并立即与另一端断开连接。有时我只会收到无穷无尽的重复错误消息 (STATUS_BLUETOOTH_ERROR and/or STATUS_ENDPOINT_IO_ERROR).
我正在使用 Nearby Connections 和连接策略 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
)而不是设备蓝牙名称?不过,我对此一点也不确定。而且无论如何,如果这些是 Nearby Connections 自己的特殊标记,那么为什么它会发出有关它的警告消息?
[免责声明:我在 Nearby Connections 工作]我可以尝试帮忙。
STATUS_ALREADY_CONNECTED_TO_ENDPOINT:如果您调用 'requestConnection' 时您有任何挂起的 (onConnectionInitiated) 或已建立的 (onConnectionResult) 连接到给定端点,则会发生这种情况。将您的日志语句更早地移至 onConnectionInitiated,您应该明白我们抛出此错误的原因。
STATUS_BLUETOOTH_ERROR:蓝牙出了点问题。 phone 可能处于错误状态。这(希望)不应该经常发生。但是,如果您真的想要修复,请在重新尝试 requestConnection 之前停止广告和发现。 Nearby Connections 将在检测到此错误时切换蓝牙,但前提是没有其他任何事情发生。
STATUS_ENDPOINT_IO_ERROR:我们失去了与其他设备的连接。发生这种情况的原因有多种(他们可能走得太远、蓝牙不稳定、设备停止响应等)。如果您在有联系的情况下发现,请避免这种情况。 phone 上的发现可能很困难,最好的情况下会降低带宽,最坏的情况下会导致连接中断。
STATUS_ERROR: 出现错误,与其他错误代码不符。这是一个包罗万象的。这最常在 onConnectionResult(FAILED) 中返回,通知您在 onConnectionInitiated 和等待双方接受连接之间出现了问题。
我们还在即将发布的版本中降低了 "Cannot deserialize BluetoothDeviceName" 的日志严重性,因为它并不是真正的警告。就像你说的;当我们在发现时看到非 Nearby Connections 设备时的预期行为。
如果您仍然遇到问题,请告诉我们您使用的是什么设备,我们一定会将它们添加到我们的测试套件中。
我只想补充一点,在调用 API 时可能需要有一个简短的客户端名称字符串。
例如,Nearby.Connections.requestConnection(googleApiClient, shortNameHere,....)
我一直在用 UUID.randomUUID().toString() 生成我自己的客户端名称,这似乎导致了 STATUS_BLUETOOTH_ERROR
。
我所做的只是更改代码示例以使用 UUID 名称并使用 P2P_CLUSTER,但我收到了该错误。
这是我关于 STATUS_BLUETOOTH_ERROR
的解决方案。
我在尝试连接时一直在试验新的 Android Nearby Connections v2.0 API. Most of my devices can now talk to each other most of the time, but I also get a lot of error codes。在我的程序中检查 status.getStatusCode()
,我可以看到以下 return 代码:
- STATUS_ALREADY_CONNECTED_TO_ENDPOINT (8003)
- STATUS_BLUETOOTH_ERROR (8007)
- STATUS_ENDPOINT_IO_ERROR (8012)
- STATUS_ERROR (13)
我很难理解这些。第一个错误代码 似乎 不言自明,除了我在没有使用 "SUCCESS" return 代码点击 onConnectionResult 回调的情况下看到它所谓连接的一侧。我当前的代码充满了跟踪语句,如果已达到这些回调,我会看到日志条目。所以也许设备在较低级别连接,但如果是这样,较高级别的代码并不总是听到它。
我猜 STATUS_BLUETOOTH_ERROR 表示记录它的一侧存在蓝牙错误,而 STATUS_ENDPOINT_IO_ERROR 表示另一端存在错误(可能涉及蓝牙)?是否有可能获得更多细节? 我偶尔看到的 STATUS_ERROR (13) 状态听起来像是程序员在那些 "WTF, we should never get here" 时刻使用的那种错误代码,但在没有访问源代码的情况下,我只能猜测。
请注意,我在使用相同代码的其他时间彼此完美通信的设备之间看到了这些错误。有时,如果代码重试足够多次,它最终会获得稳定的连接。有时它会连接并立即与另一端断开连接。有时我只会收到无穷无尽的重复错误消息 (STATUS_BLUETOOTH_ERROR and/or STATUS_ENDPOINT_IO_ERROR).
我正在使用 Nearby Connections 和连接策略 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
)而不是设备蓝牙名称?不过,我对此一点也不确定。而且无论如何,如果这些是 Nearby Connections 自己的特殊标记,那么为什么它会发出有关它的警告消息?
[免责声明:我在 Nearby Connections 工作]我可以尝试帮忙。
STATUS_ALREADY_CONNECTED_TO_ENDPOINT:如果您调用 'requestConnection' 时您有任何挂起的 (onConnectionInitiated) 或已建立的 (onConnectionResult) 连接到给定端点,则会发生这种情况。将您的日志语句更早地移至 onConnectionInitiated,您应该明白我们抛出此错误的原因。
STATUS_BLUETOOTH_ERROR:蓝牙出了点问题。 phone 可能处于错误状态。这(希望)不应该经常发生。但是,如果您真的想要修复,请在重新尝试 requestConnection 之前停止广告和发现。 Nearby Connections 将在检测到此错误时切换蓝牙,但前提是没有其他任何事情发生。
STATUS_ENDPOINT_IO_ERROR:我们失去了与其他设备的连接。发生这种情况的原因有多种(他们可能走得太远、蓝牙不稳定、设备停止响应等)。如果您在有联系的情况下发现,请避免这种情况。 phone 上的发现可能很困难,最好的情况下会降低带宽,最坏的情况下会导致连接中断。
STATUS_ERROR: 出现错误,与其他错误代码不符。这是一个包罗万象的。这最常在 onConnectionResult(FAILED) 中返回,通知您在 onConnectionInitiated 和等待双方接受连接之间出现了问题。
我们还在即将发布的版本中降低了 "Cannot deserialize BluetoothDeviceName" 的日志严重性,因为它并不是真正的警告。就像你说的;当我们在发现时看到非 Nearby Connections 设备时的预期行为。
如果您仍然遇到问题,请告诉我们您使用的是什么设备,我们一定会将它们添加到我们的测试套件中。
我只想补充一点,在调用 API 时可能需要有一个简短的客户端名称字符串。
例如,Nearby.Connections.requestConnection(googleApiClient, shortNameHere,....)
我一直在用 UUID.randomUUID().toString() 生成我自己的客户端名称,这似乎导致了 STATUS_BLUETOOTH_ERROR
。
我所做的只是更改代码示例以使用 UUID 名称并使用 P2P_CLUSTER,但我收到了该错误。
这是我关于 STATUS_BLUETOOTH_ERROR
的解决方案。