 <p>You don't have to wait! If you look at the javadocs for resolveService(NsdServiceInfo serviceInfo, NsdManager.ResolveListener listener) <a href="http://developer.android.com/reference/android/net/nsd/NsdManager.html#resolveService(android.net.nsd.NsdServiceInfo,%20android.net.nsd.NsdManager.ResolveListener)">here</a> you'll notice that for the parameter listener it say's "to receive callback upon success or failure. Cannot be null. Cannot be in use for an active service resolution."</p> <p>Therefore in order for this to work just do the following:</p> <pre><code>mNsdManager.resolveService(service, new MyResolveListener()); </code></pre> <p>Where MyResolveListener is:</p> <pre><code>private class MyResolveListener implements NsdManager.ResolveListener { @Override public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) { //your code } @Override public void onServiceResolved(NsdServiceInfo serviceInfo) { //your code } } </code></pre> <p>hope this helps :)</p>