David
David

Reputation: 41

Discovering all services on the network using jmDNS on Android

I'm using the jmdns.jar from this project https://github.com/twitwi/AndroidDnssdDemo in my Android project.

I'm currently trying to find all services on my network. I can't use Android NSD, so please avoid suggesting it as a solution.

protected Object doInBackground(Object[] params) {
            try {
                WifiManager wifi = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
                final InetAddress deviceIpAddress = InetAddress.getByName(Formatter.formatIpAddress(wifi.getConnectionInfo().getIpAddress()));
                multicastLock = wifi.createMulticastLock(getClass().getName());
                multicastLock.setReferenceCounted(true);
                multicastLock.acquire();

                jmDNS = JmDNS.create(deviceIpAddress, "Android Device Discovery");
                jmDNS.addServiceListener("_http._tcp.local.", new ServiceListener() {//_services._dns-sd._udp _http._tcp.local. _workstation._tcp.local.
                    @Override
                    public void serviceAdded(ServiceEvent serviceEvent) {
                       jmDNS.requestServiceInfo("", "", 1000);
                    }

                    @Override
                    public void serviceRemoved(ServiceEvent serviceEvent) {
                    }

                    @Override
                    public void serviceResolved(ServiceEvent serviceEvent) {
                        System.out.println(serviceEvent.getInfo().getHostAddress());
                        System.out.println(serviceEvent.getInfo().getName());
                    }
                });

            }catch(IOException e) {
                Log.e(TAG, e.getMessage(), e);
            }
}

The above code gives me the address and name of a printer on my network. That's great. What I would like is a TYPE that will catch all the services being broadcasted on my network. Android NSD had a _services._dns-sd._udpthat could be used for the type of service and find all services on the network. This doesn't work with jmDNS. I can't find anything in the limited documentation about this.

Do I need to go through and add all the service types myself? That is not a very clean solution.

I have the proper perms in my AndroidManifest.

Upvotes: 2

Views: 1754

Answers (1)

Stef
Stef

Reputation: 45

Try adding the dot at the end, my jmdns app crashed without it.. Also try adding the .local. by yourself with the service type.

Upvotes: 0

Related Questions