Если бы не было сбоев 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(:com.google.android.gms@11509230:1)
                                                      at xkg.run(:com.google.android.gms@11509230:8)
                                                      at mng.run(:com.google.android.gms@11509230:25)
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                      at mso.run(:com.google.android.gms@11509230)
                                                      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(:com.google.android.gms@11509230:61)
                                                      at xlr.run(:com.google.android.gms@11509230:12)
                                                      at mng.run(:com.google.android.gms@11509230:25)
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                      at mso.run(:com.google.android.gms@11509230)
                                                      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(:com.google.android.gms@11509230:1)
                                                      at xjj.a(:com.google.android.gms@11509230:56)
                                                      at xlr.run(:com.google.android.gms@11509230:12) 
                                                      at mng.run(:com.google.android.gms@11509230:25) 
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                      at mso.run(:com.google.android.gms@11509230) 
                                                      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(:com.google.android.gms@11509230:126)
                                                      at xjs.run(:com.google.android.gms@11509230:12)
                                                      at mng.run(:com.google.android.gms@11509230:25)
                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                      at mso.run(:com.google.android.gms@11509230)
                                                      at java.lang.Thread.run(Thread.java:818)

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

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

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

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