處理ANCS裝置連線繫結問題

2021-10-07 16:53:02 字數 1524 閱讀 5130

如果你已經能夠連線普通藍芽,初次面對ancs裝置可能會有以下問題:

問題一:遵循ancs協議的的裝置會直接和系統相連,即使殺掉應用,連線還是存在的。而如果藍芽裝置處於連線狀態,它不會被掃瞄到,怎麼再次連線呢?

在core bluetooth framework裡提供了兩個方法,用於獲取已連線的裝置

//通過傳入的peripherals.identifier返回與系統連線的已知裝置陣列

- (nsarray

*)retrieveperipheralswithidentifiers:(nsarray

*)identifiers;

//通過傳入裝置的serviceid返回已連線的裝置陣列

- (nsarray

*)retrieveconnectedperipheralswithservices:(nsarray

*)serviceuuids;

複製**

nsarray *peripherals = [central retrieveconnectedperipheralswithservices:@[serviceuuid]];

if (peripherals.count > 0) else

複製**

根據不同的使用情況,可能會有不同的掃瞄,連線的邏輯,蘋果提供了乙個流程圖:

問題二:有繫結和解除功能,如何處理兩者的關係

再回看上面提到的蘋果提供的兩個獲取已連線裝置的方法,乙個是通過serviceuuid,它可以返回同一型別的裝置列表;乙個是通過裝置uuid,它在一定情況下就是唯一的(如果裝置名唯一,這裡可以使用裝置名),返回的是唯一裝置。那麼我們就可以利用uuid的唯一性,作為繫結的標示,存到nsuserdefault裡面,對於未繫結的裝置通過serviceuuid去獲取裝置列表。參考**:

nsuserdefaults *userdefault = [nsuserdefaults standarduserdefaults];

nsstring *uuidstring = [userdefault objectforkey:rwble_bandidentifi_id];

nsarray *peripherals;

if (uuidstring) else

/* peripherals connect code */

複製**

//解綁裝置

- (void)unbinddevice

複製**

這麼寫看似已經解決問題了,但是會出現一種情況:解綁了裝置,殺掉應用,再次進入裝置還是能連上。why?因為雖然沒有了uuid,但進入程式會通過serviceuuid再次獲取連線。

這時可以在掃面做乙個判斷,是否剛解綁過裝置。可以是個bool值,繫結和初始繫結為no,解綁操作改為yes。如果剛解綁過裝置,就直接返回不做後面的掃瞄操作,這樣就解決了上面的問題。這個比較簡單,就不列具體**了。

SSH 連線緩慢問題處理

ssh 連線緩慢問題處理 問題現象 我們有時候會遇到ssh連線伺服器的時候非常慢,經常是要等30秒以上,甚至更長的時間。但是通過telent沒有問題可以實現秒登,ping都沒有問題返回都是幾毫秒。問題原因 原因是因為ssh在連線的時候會去尋找dns記錄進行查詢訪問,那麼這個時候dns又正好沒有開啟或...

mysql連線錯誤問題處理

錯誤如下 mysql client does not support authentication protocol requested by server consider upgrading mysql從網上查了一下原因 原來mysql8 之前的版本中加密規則是mysql native pass...

AWS ECU SSH無法連線問題處理

以下步驟 1.啟動乙個暫時的例項,建議使用 amazon linux,t2.micro 就可以。建立乙個 映像 建立映像 2.停止例項 i 0f500cd569bb3f472 例項停止後把根捲 vol 0561ef27d21080f84 裝置名稱 dev sda1 從例項斷開連線。停止例項,終止是直...