CoreBluetooth框架下的ble4.0開(kāi)發(fā)總結(jié)

幾個(gè)月之前利用CoreBluetooth.framework開(kāi)發(fā)出一款基于ble4.0功能的APP造挽,現(xiàn)在有時(shí)間進(jìn)行一下總結(jié):

1碱璃、APP與硬件進(jìn)行連接、掃描硬件饭入,要把手機(jī)作為central來(lái)使用嵌器,首先創(chuàng)建中心對(duì)象完成初始化(代碼如下)
dispatch_queue_t queue = dispatch_queue_create("com.xxx.xxx", DISPATCH_QUEUE_SERIAL);
CBCentralManager * central =[[CBCentralManager alloc]initWithDelegate:self queue:queue];

2、初始化后會(huì)調(diào)用代理CBCentralManagerDelegate 的 - (void)centralManagerDidUpdateState:(CBCentralManager *)central方法谐丢,在這個(gè)方法里CBCentralManagerState是個(gè)枚舉爽航,可以利用central.state來(lái)判斷藍(lán)牙開(kāi)啟、關(guān)閉乾忱、設(shè)備是否支持等等岳掐。

3、想要連接硬件饭耳,首先要掃描,就一句話掃描所有硬件(代碼如下)
[central scanForPeripheralsWithServices:nil options:nil];

4执解、掃描完成后寞肖,一旦有peripheral被搜尋到,會(huì)調(diào)用如下方法
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI衰腌,此方法可以獲取掃描到的硬件里的所有數(shù)據(jù)新蟆,

5、連接自己想要連接的硬件(代碼如下)

  • (void)connectPeripheral:(CBPeripheral *)peripheral options:(nullable NSDictionary<NSString *, id> *)options

到目前為止你就成功的連接到了想要連接的指定硬件了右蕊,接下來(lái)就是要進(jìn)行對(duì)硬件的讀與寫(xiě)了琼稻。

6、調(diào)用完centralManager:didDiscoverPeripheral:advertisementData:RSSI:方法連接外設(shè)后饶囚,如果連接成功會(huì)調(diào)用如下方法:- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral帕翻,在此方法里你就要停止掃描了:- (void)stopScan鸠补,還要尋找連接設(shè)備里的peripheral(服務(wù)):- (void)discoverServices:(nullable NSArray<CBUUID *> *)serviceUUIDs
如果連接失敗會(huì)調(diào)用此方法:- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

7、外設(shè)連接之后嘀掸,找到該設(shè)備上的指定服務(wù)調(diào)用CBPeripheralDelegate方法

  • (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error來(lái)檢測(cè)這個(gè)服務(wù)的characteristics(特征碼):-(void)discoverCharacteristics:(nullable NSArray<CBUUID *> *)characteristicUUIDs forService:(CBService *)service

8紫岩、找到特征之后調(diào)用這個(gè)方法- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error,在此方法里遍歷service.characteristics用CBCharacteristic來(lái)接收睬塌,如果特征是 read 的要調(diào)用- (void)readValueForCharacteristic:(CBCharacteristic *)characteristic方法泉蝌,如果特征是 notify 的要調(diào)用- (void)setNotifyValue:(BOOL)enabled forCharacteristic:(CBCharacteristic *)characteristic

9揩晴、當(dāng)setNotifyValue方法調(diào)用后會(huì)調(diào)用如下方法

  • (void)peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error進(jìn)行判斷characteristic是否為isNotifying勋陪,如果是 yes就調(diào)用- (void)readValueForCharacteristic:(CBCharacteristic *)characteristic

10、調(diào)用完readValueForCharacteristic:方法后會(huì)調(diào)用如下方法:

  • (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error诅愚,此方法獲取characteristic.value筹燕,這個(gè) value 就是我們想要的notify的值了泵三。

11耕捞、如果連接上的設(shè)備突然斷開(kāi),會(huì)自動(dòng)回調(diào)下面的方法:
-(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
在此方法里就可以進(jìn)行斷線重連了:- (void)connectPeripheral:(CBPeripheral *)peripheral options:(nullable NSDictionary<NSString *, id> *)options

上面是 read 和notify特征的操作烫幕,那么特征為write又改如何操作呢俺抽,下面開(kāi)始介紹 write 的操作

12、往硬件里寫(xiě)數(shù)據(jù)要手動(dòng)調(diào)用:- (void)writeValue:(NSData *)data forCharacteristic:(CBCharacteristic *)characteristic type:(CBCharacteristicWriteType)type方法较曼,CoreBluetooth框架還提供了檢測(cè)是否寫(xiě)入成功的方法:-(void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error

CoreBluetooth框架是不是很強(qiáng)大磷斧,利用此框架完成ble開(kāi)發(fā)從此無(wú)難度啊,最后附上之前 ble4.0開(kāi)發(fā)的 demo,學(xué)習(xí) ble4.0開(kāi)發(fā)的同學(xué)可以去看看:
https://github.com/tongyuling/CoreBluetooth

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弛饭,一起剝皮案震驚了整個(gè)濱河市冕末,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孩哑,老刑警劉巖栓霜,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異横蜒,居然都是意外死亡胳蛮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門丛晌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仅炊,“玉大人,你說(shuō)我怎么就攤上這事澎蛛「ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵谋逻,是天一觀的道長(zhǎng)呆馁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)毁兆,這世上最難降的妖魔是什么浙滤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮气堕,結(jié)果婚禮上纺腊,老公的妹妹穿的比我還像新娘。我一直安慰自己茎芭,他們只是感情好揖膜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著梅桩,像睡著了一般壹粟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宿百,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天煮寡,我揣著相機(jī)與錄音,去河邊找鬼犀呼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛薇组,可吹牛的內(nèi)容都是我干的外臂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼律胀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宋光!你這毒婦竟也來(lái)了貌矿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤罪佳,失蹤者是張志新(化名)和其女友劉穎逛漫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赘艳,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酌毡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕾管。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枷踏。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖掰曾,靈堂內(nèi)的尸體忽然破棺而出旭蠕,到底是詐尸還是另有隱情,我是刑警寧澤旷坦,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布掏熬,位于F島的核電站,受9級(jí)特大地震影響秒梅,放射性物質(zhì)發(fā)生泄漏旗芬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一番电、第九天 我趴在偏房一處隱蔽的房頂上張望岗屏。 院中可真熱鬧,春花似錦漱办、人聲如沸这刷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)暇屋。三九已至,卻和暖如春洞辣,著一層夾襖步出監(jiān)牢的瞬間咐刨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工扬霜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留定鸟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓著瓶,卻偏偏與公主長(zhǎng)得像联予,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容