Я экспериментировал с новыми подключениями поблизости Android. v2.0 API. Большинство моих устройств теперь могут общаться друг с другом большую часть времени, но я также получаю много коды ошибок назад при попытке подключения. Проверяя status.getStatusCode()
внутри своей программы, я вижу следующие коды возврата:
- STATUS_ALREADY_CONNECTED_TO_ENDPOINT (8003)
- STATUS_BLUETOOTH_ERROR (8007)
- STATUS_ENDPOINT_IO_ERROR (8012)
- STATUS_ERROR (13)
Я с трудом разбираюсь в этом. Первый код ошибки кажется очевидным, за исключением того, что я вижу его в тех случаях, когда я не нажимаю обратный вызов onConnectionResult с кодом возврата «УСПЕХ» на любой стороне предполагаемого соединения. Мой текущий код полон операторов трассировки, и я бы увидел записи в журнале, если бы эти обратные вызовы были достигнуты. Так что, возможно, устройства подключены на каком-то более низком уровне, но если это так, то код более высокого уровня не всегда об этом слышит.
Я предполагаю, что STATUS_BLUETOOTH_ERROR указывает на ошибку Bluetooth на стороне, которая ее регистрирует, а STATUS_ENDPOINT_IO_ERROR указывает на ошибку (вероятно, связанную с Bluetooth) на другом конце? Можно ли получить более подробную информацию? Статус STATUS_ERROR (13), который я вижу время от времени, звучит как код ошибки, который программист использовал бы для тех моментов «WTF, мы никогда не должны сюда попасть», но без доступа к исходному коду я могу только догадываться.
Обратите внимание, что я вижу эти ошибки между устройствами, которые прекрасно взаимодействуют друг с другом в другое время, используя один и тот же код. Иногда, если код повторяет достаточное количество попыток, он в конечном итоге устанавливает стабильное соединение. Иногда он подключается и мгновенно отключается от другого конца. Иногда я просто получаю бесконечный поток повторяющихся сообщений об ошибках (STATUS_BLUETOOTH_ERROR и/или 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
) вместо имени Bluetooth устройства? Хотя я совсем в этом не уверен. И вообще, если это собственные специальные токены Nearby Connections, то почему они выдают предупреждающие сообщения об этом?