Если бы не было сбоев STATUS_BLUETOOTH_ERROR, вы должны увидеть, как два устройства успешно подключились.

аюсь использовать новыйAndroid Nearby Connections v2.0 API сP2P_CLUSTER Стратегия подключения. Следующая проблема (при которой оба устройства запрашивают соединения, но не соединяются успешно), по-видимому, возникает на разных устройствах под управлением Android K-N. Иногда код получает успешное постоянное соединение ... Иногда нет.

В этом сценарии обе стороны рекламируют и обнаруживают, обе стороны обнаруживают друг друга, и обе стороны отправляют запросы на соединение (но соединение не инициировано). Трудно создать надежную ситуацию с конкретным контрольным примером, но это случается.

Используя Android Monitor, я получил подробную информацию о том, как этот сценарий выглядит с одной стороны, и перечислил последовательность событий ниже. В этом конкретном сеансе устройство, которое я наблюдал, было очень дешевым телефоном KitKat, а удаленной конечной точкой был планшет Samsung Lollipop (в случае необходимости).

Удаленный узел обнаружен, и мы выдаемrequestConnection

Сразу после этого Android Monitor показывает эту ошибку:

09-28 11:49:38.706 17321-17823/? E/NearbyConnections: In startClient(), UKEY2 failed with endpoint AqXW
                                                  java.io.IOException: bt socket closed, read return: -1
                                                      at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:647)
                                                      at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
                                                      at java.io.InputStream.read(InputStream.java:162)
                                                      at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:149)
                                                      at java.io.BufferedInputStream.read(BufferedInputStream.java:295)
                                                      at libcore.io.Streams.readFully(Streams.java:81)
                                                      at java.io.DataInputStream.readInt(DataInputStream.java:103)
                                                      at xkj.c(:[email protected]:1)
                                                      at xkg.run(:[email protected]:8)
                                                      at mng.run(:[email protected]:25)
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                      at mso.run(:[email protected])
                                                      at java.lang.Thread.run(Thread.java:818)

Сразу после этого он попадает в ResultCallback requestConnection, сSTATUS_ENDPOINT_IO_ERROR (8012).

Далее, потому чтоrequestConnection вернул ошибку, мы остановили обнаружение, подождали 3 секунды, а затем снова запустили обнаружение.

Следующее сообщение трассировки после перезапуска обнаружения - это сообщение от NearbyConnections:

09-28 11:49:46.333 17321-17412/? E/NearbyConnections: onIncomingConnection() for client 308946494 failed to initialize the connection with IkFxWFf_F-sAAAAAAAAAHHA_I2pIK25WaixTQEZSNHtVbmtub3duIFVzZXI
                                                  java.io.IOException: Failed to read ConnectionRequestFrame
                                                      at xjj.a(:[email protected]:61)
                                                      at xlr.run(:[email protected]:12)
                                                      at mng.run(:[email protected]:25)
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                      at mso.run(:[email protected])
                                                      at java.lang.Thread.run(Thread.java:818)
                                                   Caused by: java.io.IOException: bt socket closed, read return: -1
                                                      at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:647)
                                                      at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
                                                      at java.io.InputStream.read(InputStream.java:162)
                                                      at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:149)
                                                      at java.io.BufferedInputStream.read(BufferedInputStream.java:295)
                                                      at libcore.io.Streams.readFully(Streams.java:81)
                                                      at java.io.DataInputStream.readInt(DataInputStream.java:103)
                                                      at xkj.c(:[email protected]:1)
                                                      at xjj.a(:[email protected]:56)
                                                      at xlr.run(:[email protected]:12) 
                                                      at mng.run(:[email protected]:25) 
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                      at mso.run(:[email protected]) 
                                                      at java.lang.Thread.run(Thread.java:818)

Я предполагаю, что вышеупомянутая ошибка была вызвана с requestConnection с другой стороны? И если бы у нас не было этой ошибки, это пошло бы к моемуonConnectionInitiated Перезвони? (Просто чтобы уточнить: это не ударил мойonConnectionInitiated Перезвони.)

Далее я еще раз обнаруживаю другой узел иrequestConnection еще раз.

Сразу после этого я вижу следующее (другое) сообщение об ошибке от NearbyConnections:

09-28 11:51:14.639 17321-17412/? E/NearbyConnections: sendConnectionRequest() for client 308946494 failed to initialize the connection with endpoint AqXW
                                                  xjx: In connectImpl(), failed to connect to Bluetooth device 28:BE:03:0C:F1:5B for endpoint AqXW
                                                      at xlo.a(:[email protected]:126)
                                                      at xjs.run(:[email protected]:12)
                                                      at mng.run(:[email protected]:25)
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                      at mso.run(:[email protected])
                                                      at java.lang.Thread.run(Thread.java:818)

Затем мы нажимаем ResultCallback requestConnection с помощьюSTATUS_BLUETOOTH_ERROR (8007)

После этого я увидел устройстваподключи потом отключи, который повторяется несколько раз. Они никогда не получали успешного постоянного соединения, хотя я видел, как это произошло после множества ошибок.

 Rapunzel Van Winkle13 окт. 2017 г., 06:50
Фатих, я также столкнулся с проблемами с этим API (как ясно из вопросов, которые я задавал), но я надеюсь, что ответы на мои вопросы могут либо идентифицировать ошибки (чтобы их можно было исправить), либо предоставить документацию и обходные пути (чтобы упростить использование API для разработчиков). Как видите, разработчик очень отзывчив. Я также заметил, что соединение не быстрое, но я не уверен, что это можно исправить. Вы можете попытаться сохранить соединения, пока ваше приложение приостановлено, поместив связанный с соединением код в службу или сохраненный фрагмент без заголовка, который сохранится.
 Xlythe12 окт. 2017 г., 21:20
Вера, не могли бы вы сообщить мне, на каких устройствах вы тестируете? Я могу посмотреть на это. Взгляни наstackoverflow.com/questions/46036191/... Кроме того, чтобы понять, что означают различные коды ошибок и как их лучше всего устранить.
 Thracian11 окт. 2017 г., 15:58
Я также получаю многоОшибка requestConnection. [8007] STATUS_BLUETOOTH_ERROR а такжене может соединиться с .. ошибки тоже в примере приложения.
 Thracian11 окт. 2017 г., 15:56
Я начал работать в Api Nearby Connections сегодня. Я просто пробую Walkie Talkie Automatic. Есть некоторые проблемы, которые я испытал до сих пор. Wi-Fi иногда отключается. Подключение занимает слишком много времени (я использую 2 устройства для тестирования), и если вы отключаетесь, делая паузу в приложении и открывая его снова, оба устройства остаются в объявлении конечной точки. Вы сталкиваетесь с этими проблемами в вашем собственном коде? Если этот Api глючит, я не хочу его использовать. Я пытаюсь создать приложение для рации вроде Zello. Я ищу SIP и создаю сервер, но связь - это не моя область. Некоторые советы будут очень полезны. С уважением.

Ответы на вопрос(1)

Решение Вопроса

если у вас есть два устройства, соединяющихся друг с другом в одно и то же время, соседние соединения (случайным образом) завершат один из запросов requestConnection () устройства первым, прежде чем второе устройство вызовет onConnectionInititated () на обоих устройствах. Вот почему вы видите «java.io.IOException: закрыт сокет bt, прочитайте return: -1» в первом журнале.

Если бы не было сбоев STATUS_BLUETOOTH_ERROR, вы должны увидеть, как два устройства успешно подключились.

Ваш ответ на вопрос