【发布时间】:2018-01-16 02:43:42
【问题描述】:
我已经问过这个问题几次(here 和here),但没有可用的回答,所以我现在换个方式问这个问题...
我需要什么
我需要能够从我自己编程的蓝牙外围设备中唤醒我的应用程序,发送和接收一些数据。出于安全原因,这是重要的数据,因此我绝对需要唤醒该应用程序。但是,设备在大多数情况下并不总是处于关闭状态,因此我需要在打开/关闭外围设备时处理这个用例。为此,我需要使用 iBeacon 唤醒应用程序,向盒子发送命令,获得响应,然后进入持续交换模式。外围设备是不是关了我才不管,等它再开的时候才需要重新开始连续数据交换的过程。
问题
我已经尝试了所有建议的背景“app wakable”info.plist 项目... Voip、背景音频、iBeacon 和蓝牙didConnectPeripheral/didDisconnect 委托方法,没有什么真正能非常可靠地工作。几天来,当我插入/拔出我的设备时,我让 iBeacon didEnterRegion 和 didExitRegion 方法触发,所以至少有一些可靠的东西。
如果我使用 iBeacon 唤醒应用程序并连接到蓝牙,真正的问题就开始了(因为在 iOS 系统级别连接/配对之前,我无法与盒子交换信息)。由于该应用程序尚未配对,因此后台中的任何命令都不会进入该框。在后台启动此过程时,不会出现询问您是否要与此设备配对的消息(当应用程序运行时一切正常并且您可以配对)。
此外,即使我确实有机会配对,我现在也将永久连接/配对(我不希望用户每次插入设备时都必须按“配对”并且应用程序是关闭)。除非用户进入蓝牙设置并“忘记设备”,否则我无法断开它们。因此,一旦应用程序关闭,我就失去了使用 iBeacon 唤醒应用程序的能力,因为现在只要应用程序通过蓝牙连接,iBeacon 就永远不会触发。
我的问题
其他应用如何如此轻松地做到这一点?从后台/终止永久唤醒您的应用的正确流程是什么?我正在努力弄清楚这里的流程。
我真的希望只在不需要连接或配对的用例中使用 iBeacon 吗?我应该以某种方式断开用户与外围设备的连接吗?
求和
因此,总而言之,如果您需要连接/配对外围设备,则使用 iBeacon 唤醒应用程序将不起作用,因为在不再配对/连接之前,这些方法将永远不会再次触发。如果我要找到一些神奇的方法来在应用程序死机并恢复到 iBeacon 时断开一个人的连接,它就行不通,因为我似乎无法从后台配对,因此命令不会到达外围设备。最后,如果我使用纯连接的蓝牙方法,didConnect 和 didDisconnect 方法在我插入/拔出设备时永远不会触发。
【问题讨论】:
标签: ios objective-c bluetooth bluetooth-lowenergy ibeacon