8

我正在尝试实现一个简单的 android 应用程序,该应用程序在一个设备上广播 WifiP2p bonjour 服务,并让第二个设备发现并连接到它。我已经非常关注这里的教程

我有一个有效的Channel对象 aDnsSdServiceResponseListener和 a DnsSdTxtRecordListener,并通过此调用设置它们:

mManager.setDnsSdResponseListeners(channel, servListener, txtListener);

截至目前,两个听众都只是吐出一些调试信息以保持简单。

问题是 myDnsSdServiceResponseListener从未被调用,但DnsSdTxtRecordListener 确实被调用并且传入的所有参数看起来都是合法的。怎么能叫一个而不能叫另一个?

我正在使用两个实际设备进行测试,它们都运行 android 4.2.2。

谢谢!

4

1 回答 1

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();

现在正在调用两个听众。似乎我的第一种方法会过滤掉附近广播的其他服务,这就是我最初选择超载的原因。

于 2013-03-09T21:47:21.283 回答