[英]Peripheral and central at the same time on iOS
我到处寻找并尝试了一切 ,但似乎没有任何工作:(
在iOS上,我正在制作iOS设备需要交换数据的应用程序(适用于iOS 6及更高版本)。 因此, 两个设备需要同时是外围设备和中心设备。 我完全按照WWDC视频中的规定完成,但设备无法相互成功连接。
当我只将一个设备设置为中央设备而另一个仅设置为外围设备时,中央设备无缝连接到外围设备。
但是,当两个设备同时是外围设备和中心设备时,我会得到随机错误:在任何阶段(发现服务/特性或将通知值设置为YES
)有时会发生错误,有时甚至discoverServices
甚至不会调用didDiscoverServices
我应该做些什么吗? 我只是将外设和中央代码合并到一个视图控制器中。 我注意到,如果设备“a”连接到设备“b”, 然后设备“b”连接到设备“a”,它通常工作。 我通过使用NSThread sleepForTimeInterval:
来管理这个NSThread sleepForTimeInterval:
在每个设备上手动操作不同的时间,但是如何让一个设备以可靠(而不是手动预定义)的方式首先连接(然后另一个)?
如果我确实收到错误,通常它们只是简单的Unknown error
如果您需要任何代码或任何其他信息,请告诉我:)
是的,它可以同时兼具两种角色。 您只需初始化CBPeripheralManager
和CBCentralManager
。 一旦外围设备管理器初始化并且您收到POWER ON
状态,设备就会开始充当外围设备。 您可以在此时添加服务并从其他设备接收连接。 同时,您可以使用中央管理器扫描并启动与其他外围设备的连接。
请注意,即使它充当外围设备,也无法连接到您自己的设备。
对于您的错误,我建议:
[[CBCentralManager alloc] initWithDelegate:self queue:my_dedicated_bluetooth_q]
Unknown error
原因的Unknown error
。 从您的描述来看,可能有很多原因可能导致您的设置失败,并且需要更多信息才能更好地解决SO问题。 有关详细信息,我建议您搜索bluetooth-dev邮件列表存档https://lists.apple.com/archives/Bluetooth-dev或发送邮件Bluetooth-dev@lists.apple.com。 如果你接近这样的合理问题,社区会提供很大的帮助。
首先,你是什么意思“同时”? 如果您的意思是设备在扫描其他设备时向其他设备做广告,则不能。 但是你可以创建两个与广告和扫描共享相同锁定的线程。 在扫描之前,停止广告,在广告之前,停止扫描。 我在我的iPhone 4s和iPad上测试过,效果很好。
根据我的理解,一台设备可以一次使用一种模式。 也就是说,如果设备在外设模式下工作,那么你就无法将其作为中心模式工作。如果你看到一些标准的例子,如BTLE传输或lilke Light Blue,那么它们一次只能在一种模式下工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.