Android Wifi直接服务发现

我试图实现一个简单的android应用程序,在一个设备上广播WifiP2p bonjour服务,并有第二个设备发现并连接到它。 我几乎在这里跟着教程。

我有一个有效的Channel对象,一个DnsSdServiceResponseListener和一个DnsSdTxtRecordListener ,并通过这个调用来设置它们:

 mManager.setDnsSdResponseListeners(channel, servListener, txtListener); 

到目前为止,这两个听众只是吐出一些debugging信息,以保持简单。

问题是我的DnsSdServiceResponseListener从来没有被调用,但DnsSdTxtRecordListener 确实被调用,并且所有传入的参数都是合法的。 一个人怎么可以叫,而不是另一个呢?

我正在testing使用两个实际的设备,都运行Android 4.2.2。

谢谢!

终于搞清楚了。 获取服务请求的实例时,我指定了服务实例的名称和types以匹配创build服务时使用的值…

注册服务: mServiceInfo = WifiP2pDnsSdServiceInfo.newInstance(Consts.SERVICE_INSTANCE, Consts.SERVICE_REG_TYPE, record);

创build服务请求: mServiceRequest = WifiP2pDnsSdServiceRequest.newInstance(Consts.SERVICE_INSTANCE, Consts.SERVICE_REG_TYPE);

我得到服务请求时删除了参数newInstance方法… mServiceRequest = WifiP2pDnsSdServiceRequest.newInstance();

而现在两个听众正在被呼叫。 似乎我的第一个方法会过滤掉附近正在播放的其他服务,这就是为什么我最初select了这个过载。