Во первых, пробуем это на реальных устройствах. В эмуляторах андроид студии mDNS заработало на образах API 34.
Во-вторых, mdns подчиняется правилам UDP бродкаста, то есть по умолчанию в пределах одной подсети.
В третьих, протокол асинхронный. Можно подписаться на сообщения.
В четвертых, таймаут явного ресолва очень большой, приходится самому его ограничивать.
В пятых, имя dev.local не стандартно. И второй уровень используют для уточнения типа службы.
Так как подписку вешаем по типу службы. Н-р ('_ipp._local') Что бы поймать все принтеры.