【问题标题】:iPhone Bluetooth LE background scan proper approachiPhone蓝牙LE后台扫描正确做法
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 已经检查过了。您是否有在屏幕关闭时启动蓝牙扫描/连接的工作应用程序?
【解决方案2】:

当您在后台时,CBCentralManagerScanOptionAllowDuplicatesKey 会被忽略。因此,根据设计,一旦您进入后台,您只会收到一个 didDiscoverPeripheral。

Core Bluetooth Background Processing for iOS Apps 有更多详细信息。后台扫描的要求和限制见“蓝牙中心后台执行模式”部分。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2022-12-08
    相关资源
    最近更新 更多