I\'m trying to implement JmDNS discovery for communication between an Android app and a desktop application. I have followed the following tutorial: http://home.heeere.com/tech-
Use JmDNS.create(InetAddress addr, String name)
instead of JmDNS.create()
. In more recent versions of Android, JmDNS needs to know more about the local device and the network interface it is listening on.
JmDNS jmdns; // somewhere global
// In a background thread
public void buildJmDNS() {
InetAddress addr = InetAddress.getLocalHost();
String hostname = InetAddress.getByName(addr.getHostName()).toString();
try {
jmdns = JmDNS.create(addr, hostname); // throws IOException
} catch (IOException e) {
e.printStackTrace(); // handle this if you want
}
}
I had the same issue you are experiencing and this solved it for me. I have tried to find the example I had found that shows why this is necessary, but I cannot.
Checking out the latest source code version from the github repository did the trick. Discovering the service now works just fine on all devices. (Note: I was using JmDNS version 3.4.1 which I had downloaded from sourceforge before)
Having skimmed through the SVN history, there seem to be a couple of commits related to problems with resolving services since the 3.4.1 release.
Edit: Replaced svn with github repository since jmdns has moved there.