从"控制中心"关闭蓝牙时"CBCentralManager(delegate: self, queue: nil)"不显示蓝牙弹出消息



我正在尝试通过单击按钮将用户导航到蓝牙设置。 从"设置"应用程序关闭蓝牙时,CBCentralManager(delegate: self, queue: nil)工作正常,但是当从控制中心关闭蓝牙时,它不起作用,例如不显示默认的蓝牙弹出窗口
现在我需要知道蓝牙是否已从控制中心关闭,以便我可以向用户显示一些自定义弹出消息。

任何帮助将不胜感激。

您是正确的,初始化选项CBCentralManagerOptionShowPowerAlertKey(如果在蓝牙关闭时启动框架,它应该显示警告(实际上无法按预期工作,如果蓝牙从控制中心关闭。自iOS 11以来,如果您关闭"控制中心"中的按钮,系统实际上不会关闭蓝牙,它只会断开当前连接的设备。然后关闭蓝牙的唯一方法是从系统设置中执行此操作。这是苹果公司记录的,但对我来说,这是非常误导的。所以老实说,我不知道您遇到的 API 行为是错误,还是预期行为。

我的建议是,当您获得">centralManagerDidUpdateState:">回调时,您跳过此初始化选项,而是依赖central.state的值,然后如果值为CBManagerStatePoweredOff,则创建自己的弹出窗口,奇怪的是,无论蓝牙是从系统设置中关闭还是从控制中心关闭,情况

都会如此。如果你的应用在后台运行,你可能希望改用本地通知来引起用户的注意。

不是一个完美的解决方案,但它应该更可靠。

我已经针对此问题向Apple提交了错误报告47516284。这是我提交的问题的案文。

我注意到,当我使用"设置"应用关闭蓝牙时,将显示通知用户应用需要蓝牙的系统警报。我可以使用此系统警报直接转到蓝牙设置以将其重新打开。但是,当我使用控制中心关闭蓝牙时,没有显示系统警报。这是有问题的,因为尽管我可以显示自定义警报来告诉用户打开蓝牙,但无法通过例如点击按钮将用户直接带到蓝牙设置。我相信无论用户如何关闭蓝牙,功能都应该保持一致。

最新更新