WRT разъединения: я только наблюдал сторону первооткрывателя этого неудачного рукопожатия и не видел никаких исключений в журнале. Будут ли упомянутые исключения на стороне рекламодателя? Могу ли я что-нибудь сделать, чтобы сгладить процесс, кроме установки бета-версии Google Play?
аюсь использовать Nearby Connections 2.0 сP2P_CLUSTER
Стратегия подключения, и у меня возникают проблемы с подключением устройств и сохранением связи. Согласно моим журналам трассировки, похоже, что устройства успешно подключаются, а затем мгновенно отключаются.
Обратите внимание, что он также иногда успешно проходит через тот же код, а затем остается подключенным. Я не знаю, что заставляет это работать иногда и терпеть неудачу другие времена, и я не знаю, почему узлы автоматически отключаются. Тем не менее, я уверен, что «отключение» не выдается в моем коде. Это происходит от чего-то на более низком уровне.
Вот последовательность событий, которые я сейчас наблюдаю:
мы обнаруживаем другой узел (т. е. выполняем обратный вызов onEndpointFound), а затем выдаем requestConnectionмы нажали onConnectionInitiated для этой конечной точки. (Проверяя здесь info.isIncomingConnection (), не имеет значения, был ли это ответ на наш собственный запрос или запрос, инициированный в другом месте.)мы выдаем acceptConnection (и переводим наш статус в ОЖИДАНИЕ)мы ударяем onConnectionResult со статусом «успех». Все хорошо (и обе стороны кратко думают, что они связаны).сразу после этого мы нажимаем на Disconnected (и обе стороны переходят в неизвестный статус)Обновление: добавлена задержка 200 мс перед acceptConnectionЭто было большим улучшением, и устройства почти всегда устанавливают успешное (и длительное) соединение сейчас. Однако иногда требуется 2-3 попытки.
Например, вот что произошло при запуске простого тестового примера (с одним рекламным устройством и одним устройством обнаружения, без осложняющих факторов). С точки зрения Первооткрывателя это выглядело так:
мы попалиonEndpointFound
а такжеrequestConnection
мы попалиonConnectionInitiated
за соединение, которое мы просили, и принять егомы попалиonConnectionResult
с успешным подключением.очень скоро после этого мы ударилиonDisconnected
мы останавливаем обнаружение, ждем 3 секунды, возобновляем обнаружениемы повторяем все вышеперечисленное во второй раз, снова отключаясьНо, выполнив процесс подключения в третий раз, мы получили хорошее постоянное соединение и смогли надежно отправлять и получать данные.
Обновление: исключение на стороне рекламодателя, вызывающее отключение?Я поймал длинную серию этих автоотключений. Каждый раз рекламодатель имел это исключение как раз перед тем, как их отключили.
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)
Помогает ли это вам диагностировать проблему?