【问题标题】:Core Bluetooth scan for peripherals while the phone's screen is off手机屏幕关闭时核心蓝牙扫描外围设备
【发布时间】:2017-03-08 06:15:18
【问题描述】:

当应用程序处于后台和手机屏幕关闭时,我需要继续扫描来自外围设备的广播。从后台扫描成功,但当手机屏幕关闭时,我无法扫描(无法触发 didDiscoverPeripheral)广播。

到目前为止,我已经在applicationDidEnterBackground 内部实现了beginBackgroundTaskWithExpirationHandler,这就是我能够在后台扫描的方式。那我该怎么做呢?

【问题讨论】:

  • 您应该在应用功能中指定蓝牙后台模式。如果这样做你不需要使用beginBackgroundTaskWithExpirationHandler,但是你不能使用duplicates key,你必须扫描特定的服务UUID并且发现速度会更慢,尤其是在屏幕关闭时
  • 这很奇怪,它已经启用了;使用蓝牙 LE 配件并充当蓝牙 LE 配件。我检查了所有与蓝牙相关的框。另外,我指定了我想要发现的特定服务 UUID。但遗憾的是,即使在后台它也不起作用,所以我使用beginBackgroundTaskWithExpirationHandler 使后台工作。
  • 您是在尝试发现以前从未见过的外围设备,还是在尝试连接到以前见过的外围设备?
  • 我正在尝试发现一个我以前从未见过的外围设备。这就像一个普通的扫描,但我无意连接,只是阅读广播。
  • 您等待在后台模式下发现外围设备的时间。在后台发现外围设备可能需要比在前台多 60 倍的时间。 stackoverflow.com/questions/20427230/…

标签: ios objective-c bluetooth bluetooth-lowenergy core-bluetooth


【解决方案1】:

这是不可能的。 当您勾选'Uses Bluetooth LE accessories''Acts as a Bluetooth LE accessory'时,当iPhone屏幕灯关闭时,核心蓝牙框架停止广告和扫描。一旦屏幕灯重新亮起,它就会恢复广告/扫描。这是 iOS 中最大可能实现的场景。

如果您想更进一步,您可以使用beginBackgroundTaskWithExpirationHandler - https://developer.apple.com/documentation/uikit/uiapplication/1623031-beginbackgroundtaskwithexpiratio,但这几乎无法使用 3 分钟。应用从前台转到后台时,这 3 分钟就开始了。

为了节省电池,iOS 似乎会自动关闭 BLE 硬件,并在设备移动/屏幕唤醒时立即重新开启。因为当屏幕关闭时,用户无论如何都不会使用 iPhone。

编辑:除非设备已连接,例如耳机 - 虽然不是广告,但现有的连接设备可以共享数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2015-06-08
    • 1970-01-01
    相关资源
    最近更新 更多