Android JmDNS как убрать сервис

В настоящее время я пишу приложение для Android, которое должно отслеживать другие устройства в той же сети Wi-Fi, используя JmDNS. Процесс обнаружения работает правильно, но я не знаю, как отслеживать другие устройства, особенно замечая их удаление.

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

Мои идеи пока:

  • Используйте обнаруженное сокетное соединение, чтобы отслеживать изменения
  • Время от времени используйте JmDNS.requestServiceInfo(), чтобы проверить, доступна ли еще служба
  • Отменить / зарегистрировать сервисы + слушателей, чтобы они снова могли найти друг друга

Кто-нибудь знает другой способ решить эту проблему или может сказать мне, как вызвать serviceRemoved() Перезвоните?

PS: перед тем, как воспользоваться этим подходом, я попробовал API-интерфейс Androids-NSD, который выглядит довольно нестабильным.

1 ответ

Итак, вот некоторые вещи, которые я понял во время экспериментов:

DNS-кэш установлен на один час, что означает, что слушатели не будут удалять службу, пока этот счетчик не завершит работу.

Ошибка, которую я сделал, была отменой регистрации моего сервиса после того, как Wi-Fi был выключен. Службы отправляют широковещательные сообщения о том, что они больше не доступны. Это сообщение не может быть отправлено, если соединение Wi-Fi было отключено.

Таким образом, вместо вызова JmDNS.unregisterAllServices() после подключения Wi-Fi, я должен вызывать его, когда оно доступно. Это приводит к срабатыванию обратного вызова onServiceRemoved() в слушателе

Другие вопросы по тегам