2017-04-05 76 views
4

所以有一種方法可以通過centralManagerDidUpdateState()來監控CBCentralManager的狀態變化。但是有沒有類似的方法調用來監視CBPeripheral的狀態更改?我找不到在CoreBluetooth庫中發現的任何內容,並且我想在每次更改CBPeripheralState時調用一個函數。監控CBPeripheral狀態變化

現在我所擁有的是一個switch語句,用於檢查外設狀態,但它總是會返回連接或斷開狀態。我將如何到達連接/斷開連接的情況?我試過把我switch語句中的我的代碼各個部分,從bleInit()方法,以startScanning(), connectToPeripheral()

switch(peripheral.state){ 
case .disconnected: 
    print("disconnected") 
case .connecting: 
    print("connecting") 
case .connected: 
    print("connected") 
case .disconnecting: 
    print("disconnecting") 
default: break 
} 

回答

2

連接狀態和斷開狀態是過渡狀態。你的連接只會在這些州很短的時間內;這就是爲什麼你永遠不會看到這些國家。

如果您的應用充當中央設備,則通過CBCentralManagerdidConnectdidDisconnectPeripheral方法通知外設連接狀態。

+0

我能夠使didConnect和didDisconnect啓動並運行,並且外設狀態按預期顯示。不過要回顧一下,我無法得到關於連接和斷開狀態的通知,因爲它們發生得這麼快?出於好奇,爲什麼這些案例暴露在API中?他們通常會用什麼樣的用法? –

+0

我想蘋果在CoreBluetooth狀態跟蹤內部使用它們。我可能不應該說你會「永遠」不會看到它們,但是在外圍設備處於這些狀態之一的瞬間,恰好讀取狀態變量的可能性非常小。 – Paulw11

+0

這可能會偏離主題,但是有什麼方法可以檢查外設斷開連接的原因(不考慮距離或信號強度等因素),無論是在我的應用程序端還是在丟棄連接的硬件端? 我相信我在某個地方看到,只要應用程序處於前臺,Apple不會超時。 –

-1
+0

這就是我的想法,但從我的理解,與預期的命名約定相反,CBCentralManager管理CBPeripherals,而CBPeripheralManager管理CBCentral。 CBCentralManager管理髮現的/連接的外圍設備,CBPeripheral是表示外圍設備的實例對象。 CBPeripheralManager管理外設內發佈的服務進行通告,而CBCentral是表示連接到外設的中央設備的實例對象 –