iPhone蓝牙LE后台扫描正确方法

时间:2015-05-06 22:43:15

标签: ios iphone bluetooth-lowenergy core-bluetooth

我尝试在后台扫描并连接蓝牙LE设备。它的工作效果很好,除了应用程序只在屏幕打开时才会发现设备。为了测试,我发送推送通知,触发应用程序扫描并连接到蓝牙设备。如果我锁定设备,屏幕关闭,我发现没有设备。如果我打开屏幕,即使没有解锁手机,那么一切都按预期工作。有人知道如何在屏幕关闭时让蓝牙LE扫描工作吗?

编辑:

我想我澄清一下,当我设置我的CBCentralManger时,这是我使用的代码:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerOptionShowPowerAlertKey, nil];
self.manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:options];

然后当我在后台开始扫描时,这就是我调用的代码:

NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:true] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
NSArray *services = @[[CBUUID UUIDWithString:kFilterUUID]];
[self.manager scanForPeripheralsWithServices:services options:options];

我尝试为CBCentralManager设置dispatch_queue_t,但是当我创建一个这样的:

dispatch_queue_t centralQueue = dispatch_queue_create("com.novatek.mycentral", DISPATCH_QUEUE_SERIAL);

我的扫描完全停止了工作,甚至没有在后台扫描。我尝试做的是一个自定义队列吗?如果是这样,设置一个的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

确保在目标功能页面中启用了正确的后台模式。转到目标的“功能”选项卡,然后将“背景模式”切换为“开”,选中“使用蓝牙LE配件”。

答案 1 :(得分:0)

当你在后台时,CBCentralManagerScanOptionAllowDuplicatesKey被忽略。因此,一旦你在后台设计,你只会收到一个didDiscoverPeripheral。

有关Core Bluetooth Background Processing for iOS Apps的详细信息。有关后台扫描的要求和限制,请参阅“蓝牙 - 中央后台执行模式”部分。

此要点直接适用于您的问题 -

  

CBCentralManagerScanOptionAllowDuplicatesKey扫描选项键是   忽略,广告外围设备的多个发现   合并为一个发现事件。