Android Wifi直接服务发现

时间:2013-03-08 03:51:34

标签: android android-wifi bonjour wifi-direct

我正在尝试实现一个简单的Android应用程序,它在一台设备上广播WifiP2p bonjour服务,并让第二台设备发现并连接到它。我几乎遵循教程here

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

mManager.setDnsSdResponseListeners(channel, servListener, txtListener);

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

问题是我的DnsSdServiceResponseListener从未被调用,但DnsSdTxtRecordListener 确实被调用,并且传入的所有参数看起来都是合法的。如何调用一个而不是另一个呢?

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

谢谢!

1 个答案:

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

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