【发布时间】:2015-05-06 22:43:14
【问题描述】:
我正在尝试在后台扫描并连接到蓝牙 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);
我的扫描完全停止工作,甚至不在后台。我正在尝试做的事情是否需要自定义队列?如果是这样,设置一个的正确方法是什么?
【问题讨论】:
-
您等了多长时间?在后台扫描可能需要 60 倍的时间,甚至更多。外围设备之前是否被应用程序发现?如果是这样,我的操作系统可能会忽略重复的发现。
-
你有没有想过这个问题?我的应用程序可以在前台和后台检测新的外围设备。但不是在手机锁定时。
标签: ios iphone bluetooth-lowenergy core-bluetooth