当应用程序在后台和手机屏幕关闭时,我需要不断扫描来自外围设备的广播。从后台扫描成功,但我无法在手机屏幕关闭时扫描(无法触发didDiscoverPeripheral)广播。
到目前为止,我已经在applicationDidEnterBackground中实现了beginBackgroundTaskWithExpirationHandler,这就是我能够在后台扫描的方式。那么我该怎么做呢?
发布于 2020-05-28 13:54:54
这是不可能的。当您勾选'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。
编辑:除非连接了耳机之类的设备,否则现有的连接设备可以共享数据。
https://stackoverflow.com/questions/40252806
复制相似问题