DidDiscover外围设备:有时在后台不工作 [英] didDiscoverPeripheral: not working sometimes on background

查看:0
本文介绍了DidDiscover外围设备:有时在后台不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

发生在iOS 12&;iOS 13

我已将Bluetooth-central正确添加到我的Info.plist

我正在指定服务UUID列表

我看到的:

  • 如果我在前台与我们的BLE设备交互,我仍然可以在后台扫描它,即使是在几个小时和几天后,只要我不关闭蓝牙或重新启动iOS设备。
  • 如果我在应用程序打开时从未与其交互,或者如果我重新启动设备,或关闭设备上的蓝牙,则在后台扫描时,didDiscoverPeriph外设:从未被调用,直到我打开应用程序,这将立即触发didDiscoverPeriphery:。
  • 如果我使用retrievePeripheralsWithIdentifiers:,并且iOS可以返回缓存的对象,那么我就可以跳过扫描直接连接,效果很好。但有时retrievePeripheralsWithIdentifiers:不返回对象,因此我不能总是依靠它(并强制用户首先在前台与我们的设备交互)

推荐答案

所以,在我和我们的固件团队来回奔波了一段时间后,我们找到了问题背后的原因。

结果是,后台应用程序在扫描时不会读取广告扩展包。问题是,我们用来筛选设备扫描的服务UUID仅在该播发扩展包上发送。

因此,当应用程序扫描新设备时,它不会找到具有该服务UUID的任何内容,但一旦它在应用程序打开的情况下找到它,它就会在内部将其与其服务一起缓存,从那时起,它甚至在后台也可以工作(因为它已经知道该设备有哪些服务)。

修复程序是在第一个播发数据包中包含该服务UUID。

这篇关于DidDiscover外围设备:有时在后台不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆