Conexiones cercanas 2.0: conexión exitosa, seguida inmediatamente de desconexión

Estoy tratando de usar Nearby Connections 2.0 con elP2P_CLUSTER estrategia de conexión, y tengo problemas para que mis dispositivos se conecten y permanezcan conectados. Según mis registros de seguimiento, parece que los dispositivos se están conectando con éxito y luego se desconectan instantáneamente.

Tenga en cuenta que a veces también se ejecuta con éxito el mismo código y luego permanece conectado. No sé qué lo hace funcionar a veces y fallar otras veces, y no sé por qué los nodos se desconectan automáticamente. Sin embargo, estoy seguro de que la "desconexión" no se emite en mi código. Proviene de algo en un nivel inferior.

Aquí está la secuencia de eventos que estoy viendo actualmente:

descubrimos otro nodo (es decir, presionamos la devolución de llamada onEndpointFound) y luego emitimos requestConnectiongolpeamos onConnectionInitiated para ese punto final. (Verificando info.isIncomingConnection () aquí, no parece importar si esto fue una respuesta a nuestra propia solicitud, o una solicitud iniciada en otro lugar).emitimos acceptConnection (y cambiamos nuestro estado a PENDIENTE)golpeamos onConnectionResult con el estado "éxito". Todo está bien (y ambas partes piensan brevemente que están conectadas).Inmediatamente después, pulsamos en Desconectado (y ambos lados pasan a estado desconocido)Actualización: Se agregaron 200 ms de retraso antes de aceptar Conexión

Esta fue una gran mejora, y los dispositivos casi siempre establecen una conexión exitosa (y duradera) ahora. Sin embargo, a veces toma 2-3 intentos.

Por ejemplo, esto es lo que sucedió al ejecutar un caso de prueba simple (con un dispositivo de publicidad y un dispositivo de descubrimiento, y sin factores de complicación). Desde el punto de vista del Descubridor, se veía así:

GolpeamosonEndpointFound yrequestConnectionGolpeamosonConnectionInitiated para la conexión que solicitamos y la aceptamosGolpeamosonConnectionResult con conexión exitosamuy poco después, golpeamosonDisconnecteddetenemos el descubrimiento, esperamos 3 segundos, reiniciamos el descubrimientopasamos por todo lo anterior por segunda vez, desconectando nuevamente

Pero al ejecutar el proceso de conexión por tercera vez, obtuvimos una buena conexión persistente y pudimos enviar y recibir datos de manera confiable.

Actualización: ¿Excepción en el lado del anunciante que causa la desconexión?

Capté una larga serie de estas desconexiones automáticas. Cada vez, el Anunciante tuvo esta excepción justo antes de desconectarse.

10-09 19:17:26.365 29232-29232/? E/SearchServiceStarter: Task 174 failed or timed out. Client 128565203126930423 disconnecting from SearchService!
                                                     java.util.concurrent.CancellationException: Task was cancelled.
                                                         at com.google.common.util.concurrent.d.cp(SourceFile:75)
                                                         at com.google.common.util.concurrent.d.get(SourceFile:57)
                                                         at com.google.common.util.concurrent.cj.n(SourceFile:2)
                                                         at com.google.common.util.concurrent.ay.l(SourceFile:50)
                                                         at com.google.common.util.concurrent.ba.run(SourceFile:5)
                                                         at com.google.android.apps.gsa.shared.util.concurrent.a.bc.run(SourceFile:2)
                                                         at android.os.Handler.handleCallback(Handler.java:808)
                                                         at android.os.Handler.dispatchMessage(Handler.java:103)
                                                         at android.os.Looper.loop(Looper.java:193)
                                                         at android.app.ActivityThread.main(ActivityThread.java:5299)
                                                         at java.lang.reflect.Method.invokeNative(Native Method)
                                                         at java.lang.reflect.Method.invoke(Method.java:515)
                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:831)
                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:647)
                                                         at dalvik.system.NativeStart.main(Native Method)

¿Esto te ayuda a diagnosticar el problema?

Respuestas a la pregunta(1)

Su respuesta a la pregunta