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

www*_*.se 10 bluetooth ios 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];
Run Code Online (Sandbox Code Playgroud)

目前的状态是:

  • 在前台模式下,当我启动外围设备时,应用程序会快速接收广告消息(一秒钟内)

  • 在后台模式下,应用程序有时会在启动外围设备后的10秒内接收广告消息(即使它很糟糕也可以接受)但是通常它不会在很长时间内(几分钟或更长时间)收到广告而这不是为申请工作.

问题是:

在扫描应用程序处于后台时,是否可以通过某种方式提高iOS扫描蓝牙4.0 LE外围设备的速率?由于我认为没有公共API可以做到这一点,我正在寻找一个Apple未发布的私有API.这适用于内部企业应用程序,因此私有API将完全正常.

Eta*_*tan 5

背景模式对扫描的工作方式不同

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

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

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

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

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