我正在iPhone 5S上使用Bluetooth LE,并且已完成以下操作:

  • 我有一个蓝牙外围设备,我已将其配置为在所有三个蓝牙广告 channel (37、38和39)上每20毫秒进行一次广告。
  • 我已在Info.plist
  • 中使用UIBacgroundModes = bluetooth-central配置了我的应用程序
  • 我已经开始了以下
  • 的scanForPeripheralsWithServices

    代码:
    NSDictionary *options = @{
        CBCentralManagerOptionRestoreIdentifierKey:@"myCentralManagerIdentifier",
        CBCentralManagerScanOptionAllowDuplicatesKey:[NSNumber numberWithBool:YES]
    };
    self.manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:options];
    [self.manager scanForPeripheralsWithServices:[NSArray arrayWithObject:[CBUUID UUIDWithString:@"<uuid removed>"]] options:options];
    

    当前状态为:
  • 在前台模式下,当我启动外围设备(一秒钟之内)时,应用程序会迅速收到广告消息
  • 在后台模式下,应用有时会在启动外围设备后的10秒钟之内接收广告消息(即使情况不好也可以接受),但是通常很长一段时间(几分钟或更长时间)都没有收到广告,不适用于该应用程序。

  • 问题是:

    在扫描应用程序处于后台时,是否可以某种方式提高扫描iOS的蓝牙4.0 LE外设的速率?由于我认为没有公共(public)API可以执行此操作,因此我正在寻找Apple尚未发布的私有(private)API。这是针对内部企业应用程序的,因此完全可以使用私有(private)API。

    最佳答案

    后台模式在扫描时的工作方式有所不同。

  • 每个外围设备仅在首次观察到时报告一次(在后台模式下,如果未连接RSSI,则无法通过RSSI跟踪邻近性)。
  • 您可以向不在范围内的外围设备发起连接请求,并且在外围设备可用时连接将完成。不必主动进行扫描(初始发现除外,因此您知道要连接哪个UUID)。

  • 也许,您可以通过在后台发送连接请求而不是扫描来解决问题。这样,iOS知道您对特定的外围设备真的很感兴趣,并且我可以想象这会影响发现时间。

    根据您的目标,一种不同的方法可能是通过将iPhone置于外围模式并在中央模式下使用当前的LE外围设备来反转连接。似乎有点骇人听闻,但如果它能解决您所遇到的问题:为什么不:)

    关于私有(private)API:抱歉,我不知道会影响扫描参数的API。

    关于ios - 蓝牙LE,scanForPeripheralsWithServices在后台,提高速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19471798/

    10-14 23:31