iOS检测蓝牙连接/断开连接

10

当我的应用程序在后台时,是否可以在 iOS 上连接或断开蓝牙设备时收到通知? 在 Android 上,我使用 ACTION_ACL_CONNECTEDACTION_ACL_DISCONNECTED 事件。 但我找不到 iOS 的相应事件。

我找到了 CBCentralManager 可以用于监控蓝牙事件,但当蓝牙设备连接/断开时,我的函数没有被调用,只有当我启用/禁用蓝牙时才会被调用。 是我这边的错误还是正常情况?

我还发现了有关音频路由更改的文档,这也可能是检测蓝牙连接/断开的想法。 只需检查新路线的类型并在那时检测已连接的蓝牙设备即可。

在文档中,我还发现了诸如 IOBluetoothHostControllerXXXNSNotification 类型,但没有解释它们的内容。 有人已经使用过吗?

是否有更好的解决方案或者有什么我漏掉的地方吗?

1个回答

8
您通常无法接收有关蓝牙外设连接和断开的通知。您可以获得BLE外设连接和断开事件,这些事件与您的应用程序连接。
例如,如果您的应用程序启动到心率传感器的连接,则连接成功时将调用您的CBCentralManagerDelegate连接函数。如果该设备随后关闭或超出范围,则会调用断开委托方法。
如果其他应用程序发起并建立连接,则不会收到回调。
正如您所提到的,您可以监视音频路由更改以推断蓝牙音频设备是否已连接/断开,但这也会在插入耳机时触发。

是的,它不能在后台工作;如果您不是活动声音应用程序,则iOS认为您不需要任何有关音频路由的信息。 - Paulw11
不同的方法。苹果认为用户体验最重要。后台执行受到限制,因为它可能会对电池寿命和整个系统性能产生负面影响。如果您的应用程序没有在积极使用音频外设,则不需要了解连接/断开连接。 - Paulw11
4
是的,但在我的情况下,我想要做的是检测蓝牙连接/断开以知道用户何时进入/离开他的车,这对我的应用程序的用户体验是一个很大的改进。应该可以做到,但我只是找不到如何在所有这些限制下实现它... - Gp2mv3
不可能的。当用户连接到特定的外设(例如汽车音响系统)时,iOS会学习用户是否通常使用您的应用程序,并将您的应用程序作为Siri建议提供。 - Paulw11
1
苹果在iOS 11 / iOS 12方面是否有关于这个主题的改进?我目前也在iOS端遇到了困难,无法确定用户是否连接或断开了特定的蓝牙连接。 - AlexWoe89
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接