在iOS上同时使用外围设备和中央设备

在iOS上同时使用外围设备和中央设备,ios,objective-c,core-bluetooth,Ios,Objective C,Core Bluetooth,我到处找遍了,什么都试过了,但似乎什么都不管用:( 在iOS上,我正在制作一个应用程序(适用于iOS 6及以上版本),其中iOS设备需要交换数据。因此,这两个设备需要同时是外围设备和中心设备。我完全按照WWDC视频中的规定进行了操作,但设备之间无法成功连接 当我将一个设备设置为仅中央设备,而将另一个设备设置为仅外围设备时,中央设备将无缝连接到外围设备 然而,当两个设备同时处于外围和中央时,我会出现随机错误:在任何阶段(发现服务/特征或将notify value设置为YES),有时会发生错误,有时

我到处找遍了,什么都试过了,但似乎什么都不管用:(

在iOS上,我正在制作一个应用程序(适用于iOS 6及以上版本),其中iOS设备需要交换数据。因此,这两个设备需要同时是外围设备和中心设备。我完全按照WWDC视频中的规定进行了操作,但设备之间无法成功连接

当我将一个设备设置为仅中央设备,而将另一个设备设置为仅外围设备时,中央设备将无缝连接到外围设备

然而,当两个设备同时处于外围和中央时,我会出现随机错误:在任何阶段(发现服务/特征或将notify value设置为
YES
),有时会发生错误,有时
discoverServices
甚至不会调用
didDiscoverServices

我应该做些不同的事情吗?我只是将外围设备和中央代码合并到一个视图控制器中。我注意到,如果设备“a”连接到设备“b”,然后设备“b”连接到设备“a”我通过在每个设备上手动使用
NSThread sleepForTimeInterval:
进行不同时间的管理,但是如何让一个设备以可靠(而不是手动预定义)的方式首先连接(然后连接另一个设备)

如果我确实收到错误,通常它们只是
未知错误


如果您需要任何代码或任何其他信息,请告诉我:)

据我了解,一台设备一次可以使用一种模式。也就是说,如果设备在外围模式下工作,则不能将其作为中心模式工作。如果您看到一些标准示例,如或lilke,则这些示例一次只能在一种模式下工作。

是,它可以同时在两个角色中。您只需初始化
cbperipheraldmanager
CBCentralManager
。一旦外围设备管理器初始化,并且您收到
开机
状态,设备就开始充当外围设备。此时,您可以添加服务并从其他设备接收连接。同时,您可以使用中央管理器扫描并启动与其他外围设备的连接

请注意,您无法连接到自己的设备,即使它充当外围设备

对于你的错误,我建议:

  • 启动连接前关闭扫描。即扫描、查找外围设备、停止扫描、连接。连接和扫描彼此不喜欢
  • 使用专用队列来处理蓝牙事件,而不是主队列<代码>[[CBCentralManager alloc]initWithDelegate:自队列:我的专用\u蓝牙\u q]
  • 不幸的是,堆栈有时会变得不稳定。甚至可以重新启动。但这通常只发生在重载或多个同时连接的情况下。希望在iOS7中可以改进这一点
  • 最近,一些开发人员开始出现不知名的
    未知错误
    。从您的描述来看,可能有很多原因导致您的设置可能失败,并且需要更多的信息才能很好地符合SO问题
  • 有关更多信息,我建议您搜索bluetooth dev邮件列表存档或发送邮件至bluetooth-dev@lists.apple.com. 如果你提出这样合理的问题,社区会提供很大的帮助

    首先,你说的“同一时间”是什么意思? 如果是指设备在扫描其他设备时向其他设备发布广告,则不能。 但您可以创建两个线程,它们共享相同的广告和扫描锁。 扫描前,停止广告,广告前,停止扫描。
    我在iPhone4S和iPadAir上进行了测试,效果很好

    但我听说有人让它在两种模式下工作。。。根据他们的说法,他们只是简单地将外围代码和中心代码合并。有时甚至我也能让它工作——只是这种情况并不经常发生。是的,据我所知,同一个应用程序可以同时具备中央和外围设备的功能,浅蓝色就是这样。但是它一次可以在单一模式下工作,也就是说你一次可以接收或发送数据。这是错误的,一个设备完全有可能同时充当外围设备和中央设备。我一直在这样做,因为它成为可用的。正如我所说的-有时我让它工作在两种模式在同一时间。你读了这个吗?是的,我有。正如我所说,“我到处都找过了,试过了所有的方法,但似乎什么都不管用”有没有解决方案,该应用程序如何实现中央/外围设备之间的相互连接???@nao0811ta我不知道你在问什么。要了解中央和外围设备如何连接,请查看示例。同一台设备上的中央设备和外围设备无法相互连接。请提供有关您的方法的示例代码?