藍牙使用流程圖
詳細說明
1、初始化CBCentralManager。
在初始化的時候需要傳入兩個參數:
第一個參數設定Delegate一般我們設定成self;
第二個需要傳入一個隊列,出入的不是主隊列的話,那我們接收的時候也要在傳入的隊列裡面才能接收到對應的值,是以一般第二個參數可以直接出入
nil
或者
dispatch_get_main_queue()
2、實作代理方法
在該代理方法裡面主要監聽裝置目前的藍牙狀态,根據藍牙的狀态來判斷是否進行下一步的操作,狀态主要傳回如下内容:
CBCentralManagerStateUnknown = ,//目前狀态不明确
CBCentralManagerStateResetting,//
CBCentralManagerStateUnsupported,//該裝置不支援
CBCentralManagerStateUnauthorized,//未被授權
CBCentralManagerStatePoweredOff,//藍牙關閉狀态
CBCentralManagerStatePoweredOn,//藍牙開啟狀态
3、搜尋周圍的藍牙裝置調用
- (void)scanForPeripheralsWithServices:(nullable NSArray<CBUUID *> *)serviceUUIDs options:(nullable NSDictionary<NSString *, id> *)options
調用該方法的中心就不斷的搜尋周圍的藍牙裝置,需要傳入兩個參數:
第一個參數是對應裝置的UUID,如果出入
nil
就搜尋周圍的所有裝置,如果出入了指定的UUID就隻搜尋出入的裝置;
第二個參數是一個搜尋的配置參數,該參數的具體配置,自己了解還不是很清楚,平時一般出入
nil
就可以了
4、在調用搜尋周圍裝置的方法之後需要同時實作以下的代理方法
該代理方法裡面四個參數主要的意思是:
第一個參數是目前的中心
第二個參數是對應的裝置
第三個參數是對應裝置藍牙廣播出來的資訊
第四個參數是裝置的藍牙信号強度
其中我們主要使用到的是第二個參數,也就是發現的裝置
5、得到了對應裝置之後就要開始連接配接裝置,連接配接裝置我們調用
- (void)connectPeripheral:(CBPeripheral *)peripheral options:(nullable NSDictionary<NSString *, id> *)options;
在該方法中我們很明顯的看出第一個參數是需要出入一個裝置,那麼我們就将剛剛發現的裝置出入一個進去,第二個參數是需要出入一個字典屬性,我這裡一般出入的是
@{ CBCentralManagerScanOptionAllowDuplicatesKey:@YES }
其他屬性我沒有具體使用,有時間大家一起研究研究。
6、連接配接裝置的時候同時也要實作以下兩個代理方法
-(void)centralManager:(nonnull CBCentralManager *)central didDisconnectPeripheral:(nonnull CBPeripheral *)peripheral error:(nullable NSError *)error
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
在這兩個代理方法裡面,第一個方法是連接配接發生錯誤的時候調用的;第二個方法是兩節成功之後會調用的,當調用成功之後會傳回連接配接成功對應的中心和裝置,這個時候我們要設定裝置的代理因為檢索裝置的服務和服務下面對應的特征的時候都是通過代理的方式實作的
self.ConnectionDevice = peripheral;
self.ConnectionDevice.delegate = self;//設定對應的代理
7、通過連接配接成功的裝置調用以下方法發現該裝置下面的服務
該方法可以傳入一個服務的UUID如果出入了對應的UUID之後就之後搜尋對應UUID的服務。
8、調用發現服務方法的同時還需要實作對應的代理方法
第一個參數是對應的裝置,該裝置下面有一個
peripheral.services
屬性,通過該屬性能夠得到該裝置下面的所有服務,
第二個參數就是對應的錯誤資訊,當發生錯誤的時候我們需要做對應的處理
9、得到對應服務之後通過裝置調用以下方法發現服務下面對應的特征
第一個參數指定對應特征的UUID,如果傳入則隻搜尋對應UUID的特征
第二個參數傳入需要搜尋特征的服務
10、調用發現特征方法的時候還需要實作
這個代理方法會得到一個CBService在這個下面有一個
service.characteristics
這個屬性裡面有該服務下面所有的特征,我們就可以擷取到特征了。
到此我們就已經連接配接了對應的裝置,并拿到了對應裝置下面的服務和特征了,為我們後面的藍牙讀寫操作做好了基礎了。
讀寫操作
1、寫入操作調用以下方法實作
第一個參數是需要寫入的資料
第二個參數是對應寫入的特征
第三個參數是對應寫入的類型一般是
CBCharacteristicWriteWithResponse
和
CBCharacteristicWriteWithoutResponse
這兩個類型
2、設定通知監聽,調用以下方法實作
第一個參數一般情況設定成
YES
第二個參數是需要監聽的對應特征
3、讀取對應特征下面的值,調用
該方法隻需要傳入需要讀取的特征就OK了
4、在設定通知和讀取值的時候記得一定要實作以下代理方法
該代理方法在收到通知或者讀取到值的時候都會調用,通過
characteristic.value
我們就得到了想要的值了。
藍牙的手機端基本操作就差不多完成了,還有很多的地方補助,以後還要像大家學習學習.
最後給出一個自己寫的demo