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() в слушателе