我知道使用iBeacon
我可以在应用关闭时收听一些UUID
。
我想在应用关闭时听取特征的具体价值。
因此,当应用打开并连接到设备时,我会在新数据到达时获得此委托:
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if characteristic.uuid.uuidString == characteristicUUID {
if let str = NSString(data: characteristic.value!, encoding: String.Encoding.utf8.rawValue)
有什么方法可以在应用关闭时获得此委托吗?所以我可以检查并看到我得到了正在等待的正确字符串?
我知道只有当我连接到设备时才能听到这个,但即使没有连接我也想听。
iBeacon 是应用关闭时与任何 BLE 互动的唯一方式吗? 它非常有限。
答案 0 :(得分:2)
我正在回答我的问题,也有这些信息。(还要感谢保罗)
所以今天为了能够在应用程序完全关闭时(由用户或系统)从硬件获取信息,您只能使用iBeacons
。
但是iBeacons非常有限,你只能听一些UUID/MJ/MN
就可以了。
如果您想一直获取传感器数据怎么办?
方法Apple
需要您始终保持与设备的连接。因此,当您的应用处于后台时,只需在delegates
更新其价值且您仍处于连接状态时获得相同的characteristic
。
如果外出怎么办?
连接丢失,您要求再次搜索设备,当您回到家时,您有连接,您可以再次自动收听。
如果系统取消您的应用以释放内存怎么办?
在这种情况下,您使用Preservation and Restoration
,当应用再次检测到硬件时,CBCentral
会恢复centralManager=CBCentralManager(delegate: self, queue: nil, options: ["key":CBCentralManagerOptionRestoreIdentifierKey])
。为此:
CBCentralManagerOptionRestoreIdentifierKey
您在此处使用"键"设置func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) {
print(dict)
}
。
当iOS再次检测到信号时,您将获得此委托:
<table>
包含您的对象列表,您可以再次获取连接和数据。
底线: 方法是 - 如果您不断需要传感器数据,例如打开和关闭锁,您始终保持连接状态。(而不是使用iBeacon)
另一个底线: 如果用户关闭你的应用程序,正如保罗所说,你不能真正继续并倾听,这在我看来是一种非常奇怪的方法。