我正在尝试实现一个简单的Android应用程序,它在一台设备上广播WifiP2p bonjour服务,并让第二台设备发现并连接到它。我几乎遵循教程here。
我有一个有效的Channel
对象,一个DnsSdServiceResponseListener
和一个DnsSdTxtRecordListener
,并通过此次调用设置它们:
mManager.setDnsSdResponseListeners(channel, servListener, txtListener);
截至目前,两位听众只是吐出一些调试信息以保持简单。
问题是我的DnsSdServiceResponseListener
从未被调用,但DnsSdTxtRecordListener
确实被调用,并且传入的所有参数看起来都是合法的。如何调用一个而不是另一个呢?
我正在测试使用两个实际设备,都运行android 4.2.2。
谢谢!
答案 0 :(得分:12)
终于想通了..有点儿。在获取服务请求的实例时,我指定了服务实例名称和类型以匹配创建服务时使用的值...
注册服务:
mServiceInfo = WifiP2pDnsSdServiceInfo.newInstance(Consts.SERVICE_INSTANCE, Consts.SERVICE_REG_TYPE, record);
创建服务请求:
mServiceRequest = WifiP2pDnsSdServiceRequest.newInstance(Consts.SERVICE_INSTANCE, Consts.SERVICE_REG_TYPE);
我在获取服务请求时删除了newInstance方法的参数...
mServiceRequest = WifiP2pDnsSdServiceRequest.newInstance();
现在正在调用两个侦听器。似乎我的第一种方法会过滤掉附近广播的其他服务,这就是我最初选择过载的原因。