Android Wi-Fi Direct отправляет данные перед подключением

Я разрабатываю приложение, которое использует Wi-Fi для прямого подключения устройств. Я прочитал, как подключать, отправлять данные и отключать устройства здесь: http://developer.android.com/guide/topics/connectivity/wifip2p.html. Теперь я хотел бы отправить некоторые данные ДО подключения, чтобы показать некоторую информацию об устройстве. Я искал это в Google, но единственный ответ, который я нашел, таков: Отправка данных при обнаружении службы Android WiFi Direct вместо подключения, которое использует обнаружение служб.

Есть ли способ отправить данные до процесса сопряжения без использования службы обнаружения? Если я не могу, можете ли вы объяснить, в чем разница между обнаружением службы и обычным Wi-Fi P2P?

Спасибо.


person Aurasphere    schedule 02.03.2016    source источник


Ответы (1)


Если у вас нет какого-либо другого средства, на которое вы можете положиться (например, какой-то сервер, который вы можете использовать для обмена информацией), вам понадобится Service Discovery.

Я уже написал несколько ответов, касающихся WifiP2p и Service Discovery, и предлагаю вам сначала взглянуть на них. Последнее, вероятно, должно вас заинтересовать больше всего.

  1. Почему обнаружение пиров для Android WifiDirect так ненадежно
  2. Wi-Fi P2P. Информировать всех доступных пиров о некотором событии
  3. Обнаружение службы Wi-Fi P2P работает с перебоями

Чтобы ответить на ваш вопрос о разнице между WifiP2p и ServiceDiscovery, позвольте мне использовать небольшую аналогию:

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

Теперь позвольте мне объяснить... Каждый человек, держащий лист бумаги, представляет собой Broadcasted Service. Каждый broadcasted service может нести небольшую часть информации (имя человека). Место для информации очень ограничено (на бумаге много не напишешь) и является «относительно постоянным» (требуется немного времени, чтобы его изменить). Когда вы искали нужного человека, вы выполняли Service Discovery. Вам не нужно было разговаривать со всеми этими людьми, чтобы прочитать имена на этих листах бумаги - вам не нужно было подключаться к ним (с точки зрения WiFiP2p). Когда вы нашли интересующий вас, вы поговорили с мужчиной - вы установили соединение WiFiP2p. Теперь вы можете говорить с ним сколько угодно — вы можете передать через соединение столько данных, сколько захотите.

person Bartek Lipinski    schedule 02.03.2016
comment
Большое спасибо, ваш ответ был четким и действительно хорошо сделанным. К сожалению, я думал отправить данные, такие как изображение и некоторую другую информацию, но, похоже, это невозможно. Я посмотрю на это немного подробнее, чтобы увидеть, сколько данных я могу поместить в трансляцию. Спасибо, +1 и принято. - person Aurasphere; 03.03.2016
comment
Да, вы, вероятно, не сможете отправить изображение. Может быть, вы могли бы транслировать URL-адрес изображения (я не помню лимит для транслируемого сообщения) - person Bartek Lipinski; 03.03.2016