2017-01-03 70 views
1

我知道使用iBeacon當應用程序關閉時,我可以聽一些UUID。 我想傾聽具體的價值特徵當應用程序關閉。聽取backgeound中的特定藍牙特徵值

所以,當應用程序是開放並連接到設備,我得到這個代表當一個新數據到達:

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

您可以啓用後臺藍牙中心模式,您的應用程序,你會繼續當週表示改變接收到委託方法調用,但你需要保持與周邊的連接。 – Paulw11

+0

@ Paulw11謝謝我啓用了它們 - 但我詢問了應用程序關閉時的情況,在這種情況下,您無法保持通信打開... – Curnelious

+0

這取決於您所說的「關閉」是什麼意思;正常狀態在後臺暫停,並按照我所述的方式工作。如果應用程序已被系統終止(例如由於內存壓力),那麼您可以選擇進入藍牙狀態恢復(請參閱Core Bluetooth編程指南),並且在看到外設或指示外設時,您的應用程序將重新啓動到後臺變化。如果您的應用已被用戶刷屏終止,那麼在用戶重新啓動之前,您的應用無法執行任何操作。 – Paulw11

回答

2

我回答我的問題也有該信息(也感謝保羅)

所以今天,爲了能夠從硬件獲取信息時,應用程序是完全封閉的(由用戶或系統),您只能使用iBeacons

但是iBeacons是相當有限的,你只能聽一些UUID/MJ/MN和多數民衆贊成它。

如果您想一直獲取傳感器數據,該怎麼辦?

方法Apple需要的是,您應該始終保持與設備的連接。因此,當您的應用程序處於後臺時,只需在characteristic正在更新其值並且您仍處於連接狀態時獲得相同的delegates

如果你外出怎麼辦?

連接丟失,您要求再次搜索設備,當您回到家時您有連接並且您可以再次自動收聽。

如果系統取消您的應用程序以釋放內存會怎麼樣?

在這種情況下,你使用Preservation and Restoration,這將恢復CBCentral當應用程序再次檢測硬件。要做到這一點:

centralManager=CBCentralManager(delegate: self, queue: nil, options: ["key":CBCentralManagerOptionRestoreIdentifierKey]) 

你在這裏設置一個CBCentralManagerOptionRestoreIdentifierKey與你的「鑰匙」。 iOS版時再次檢測到信號,你得到這個委託:

func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) { 
    print(dict) 
} 

與對象的列表,你可以再次獲取連接和數據。

底線: 的方法是 - 如果您需要的傳感器數據不斷,例如用於打開和關閉的鎖,則保持連接所有的時間(而不是使用iBeacon顯示)

另一底部。 line: 如果用戶關閉了你的應用程序,就像Paul在這裏所說的那樣,你真的不能繼續聽,這在我看來是一種非常奇怪的方法。

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html