在过去一周左右的时间里,我一直在反对这一点。我已经浏览了以下资源:
我使用的是Mac OS 10.7,Xcode 4.5,带有iOS 6的iPhone 4和带有iOS 5.1.1的iPad 1。
我的问题是这样的:我正在修改一个当前使用GameKit的同行选择器连接iPad和iP {运动触摸}的应用程序。我们想修改它以通过蓝牙使用Bonjour,因为如果连接丢失,我们遇到了使用Gamekit重新连接设备的问题。我已经使用dns_sd.h API取得了一些成功,并获得了通过wifi进行广告和解析的服务,但即使我通过了kDNSServiceFlagsIncludeP2P,我也没有在蓝牙上取得任何成功。
我认为蓝牙Bonjour可能已经在设备之间建立了PAN,但即使将iPad与iMac配对并浏览DNS-SD服务也没有给我什么......而且iPhone无论如何都不会与iPad配对。 / p>
答案 0 :(得分:3)
我刚刚在过去的24小时内在自己的应用中完成了这个问题。我使用了OS X示例应用程序DNSSDObjects中的核心类。我只需更改三行代码即可添加对蓝牙的支持。这在我的iOS应用程序中运行良好。
在DNSSDBrowser.m中,对DNSServiceBrowse
的调用需要为第二个参数传入 kDNSServiceFlagsIncludeP2P 。
在DNSSDRegister.m中,对DNSServiceRegister
的调用需要进行相同的更改。
在DNSSDService.m中,对DNSServiceResolve
的调用也需要进行相同的更改。
如果你想限制自己只是蓝牙,而不是WiFi,那么应该更新相同的三行代码,所以第三个参数是 kDNSServiceInterfaceIndexP2P 而不是 kDNSServiceInterfaceIndexAny
答案 1 :(得分:0)
实际上,看起来kDNSServiceInterfaceIndexP2P标志在OSX上不起作用。
如果您在IOS上运行代码,您会注意到Bonjour将发布两个IP地址:一个用于本地WiFi网络,另一个用于蓝牙的169.xx.xx.xx地址。
OSX上的相同代码从不发布169.xx.xx.xx地址,因此只能通过WiFi找到。