我一直在尝试新的安卓 附近连接 v2.0API。我的大多数设备现在可以在大多数时间相互通信,但我也得到了很多错误代码尝试连接时返回。检查status.getStatusCode()
在我的程序中,我可以看到以下返回码:
- STATUS_ALREADY_CONNECTED_TO_ENDPOINT (8003)
- STATUS_BLUETOOTH_ERROR (8007)
- STATUS_ENDPOINT_IO_ERROR (8012)
- 状态错误 (13)
我很难理解这些。第一个错误代码seems不言自明的,除了当我没有在所谓的连接的任一侧点击带有“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
我猜测这是因为附近连接使用自己的短令牌(例如ZGbx
)而不是设备蓝牙名称?不过我对此一点也不确定。无论如何,如果这些是附近连接自己的特殊令牌,那么它为什么会发出有关它的警告消息呢?
[免责声明:我从事“附近连接”工作]我可以尝试提供帮助。
STATUS_ALREADY_CONNECTED_TO_ENDPOINT:如果您在与给定端点有任何待定 (onConnectionInitiated) 或已建立 (onConnectionResult) 连接时调用“requestConnection”,则会发生这种情况。将您的日志语句移至前面的 onConnectionInitiated,您应该明白为什么我们会抛出此错误。
STATUS_BLUETOOTH_ERROR:蓝牙出现问题。手机可能处于不良状态。这种情况(希望)不应该经常发生。但如果您确实想要修复,请在重新尝试 requestConnection 之前停止广告和发现。当附近的连接检测到此错误时,它会切换蓝牙,但前提是没有其他情况发生。
STATUS_ENDPOINT_IO_ERROR:我们与其他设备失去了连接。发生这种情况的原因有多种(他们可能走得太远、蓝牙不稳定、设备停止响应等)。如果你是在有联系的情况下发现的,请避免这种情况。发现在电话上可能会很困难,最好的情况是会减少带宽,最坏的情况会导致连接中断。
STATUS_ERROR:出现了与其他错误代码不太相符的问题。这是一个包罗万象的东西。这通常在 onConnectionResult(FAILED) 中返回,以通知您在 onConnectionInitiated 和等待双方接受连接之间出现了问题。
我们还在即将发布的版本中降低了“无法反序列化蓝牙设备名称”的日志严重性,因为它并不是真正的警告。就像你说的;当我们在发现时看到非“附近连接”设备时的预期行为。
如果您仍然发现问题,请告诉我们您正在使用哪些设备,我们一定会将它们添加到我们的测试套件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)