蓝牙LE,scanForPeripheralsWithServices在后台,提高速度

时间:2013-10-19 22:19:31

标签: ios bluetooth core-bluetooth bluetooth-lowenergy ios-enterprise

我在iPhone 5S上使用蓝牙LE,我做了以下工作:

  • 我有一个蓝牙外设,我已将其配置为在所有三个蓝牙广告频道(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外围设备的速率?由于我认为没有公共API可以做到这一点,我正在寻找一个Apple未发布的私有API。这适用于内部企业应用程序,因此私有API完全可以。

1 个答案:

答案 0 :(得分:5)

后台模式对扫描的工作方式不同。

  • 每个外围设备仅在第一次观察时被报告(在后台模式下,如果没有连接到RSSI,则无法跟踪RSSI的接近度。)

  • 您可以向不在范围内的外围设备发起连接请求,并在外围设备可用时完成连接。不必主动扫描(初始发现除外,因此您知道要连接的UUID)。

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

根据您的目标,不同的方法可能是通过将iPhone置于外围模式并在中央模式下使用当前的LE外设来反转连接。看似hackish,但如果它解决了你的情况的问题:为什么不:)

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