ios藍牙開發(四)BabyBluetooth藍牙庫介紹

特點:

  • 基於原生CoreBluetooth框架封裝的輕量級的開源庫,能夠幫你更簡單地使用CoreBluetooth API。
  • CoreBluetooth全部方法都是經過委託完成,代碼冗餘且順序凌亂。BabyBluetooth使用block方法,能夠從新按照功能和順序組織代碼,並提供許多方法減小藍牙開發過程當中的代碼量。
  • 鏈式方法體,代碼更簡潔、優雅。
  • 經過channel切換區分委託調用,並方便切換

來源

最近幾個月都在作藍牙項目,用CoreBluetooch感受語句寫的處處都是,不優雅。一整條鏈下來要近10幾個委託方法,而且不斷的在委託方法中調用方法再進入其餘的委託,致使 代碼很零散。所以我就想讓coreBluetooth使用更簡單,語法更優雅,因此開始寫這個BabyBluetooch藍牙庫。ios

更新於:20150916,如今BabyBluetooth 已經有了96個stargit

更新於:20160129,如今BabyBluetooth 已經有了880個stargithub

期待

  • 藍牙庫寫起來很辛苦,但願你們能夠多多支持,多多star。BabyBluetooth主頁
  • 若是在使用過程當中遇到BUG,或發現功能不夠用,但願你能Issues我,謝謝
  • 期待你們也能一塊兒爲BabyBluetooth輸出代碼,這裏我只是給BabyBluetooth開了個頭,他能夠增長和優化的地方仍是很是多。也期待和你們在Pull Requests一塊兒學習,交流,成長。

Quick Example

//導入.h文件和系統藍牙庫的頭文件 #import "BabyBluetooth.h" -(void)viewDidLoad { [super viewDidLoad]; //初始化BabyBluetooth 藍牙庫 baby = [BabyBluetooth shareBabyBluetooth]; //設置藍牙委託 [self babyDelegate]; //設置委託後直接可使用,無需等待CBCentralManagerStatePoweredOn狀態 baby.scanForPeripherals().begin() } //藍牙網關初始化和委託方法設置 -(void)babyDelegate{ //設置掃描到設備的委託 [baby setBlockOnDiscoverToPeripherals:^(CBCentralManager *central, CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) { NSLog(@"搜索到了設備:%@",peripheral.name); }]; //設置設備鏈接成功的委託 [baby setBlockOnConnected:^(CBCentralManager *central, CBPeripheral *peripheral) { NSLog(@"設備:%@--鏈接成功",peripheral.name); }]; //設置發現設備的Services的委託 [baby setBlockOnDiscoverServices:^(CBPeripheral *peripheral, NSError *error) { for (CBService *service in peripheral.services) { NSLog(@"搜索到服務:%@",service.UUID.UUIDString); } }]; //設置發現設service的Characteristics的委託 [baby setBlockOnDiscoverCharacteristics:^(CBPeripheral *peripheral, CBService *service, NSError *error) { NSLog(@"===service name:%@",service.UUID); for (CBCharacteristic *c in service.characteristics) { NSLog(@"charateristic name is :%@",c.UUID); } }]; //設置讀取characteristics的委託 [baby setBlockOnReadValueForCharacteristic:^(CBPeripheral *peripheral, CBCharacteristic *characteristics, NSError *error) { NSLog(@"characteristic name:%@ value is:%@",characteristics.UUID,characteristics.value); }]; //設置發現characteristics的descriptors的委託 [baby setBlockOnDiscoverDescriptorsForCharacteristic:^(CBPeripheral *peripheral, CBCharacteristic *characteristic, NSError *error) { NSLog(@"===characteristic name:%@",characteristic.service.UUID); for (CBDescriptor *d in characteristic.descriptors) { NSLog(@"CBDescriptor name is :%@",d.UUID); } }]; //設置讀取Descriptor的委託 [baby setBlockOnReadValueForDescriptors:^(CBPeripheral *peripheral, CBDescriptor *descriptor, NSError *error) { NSLog(@"Descriptor name:%@ value is:%@",descriptor.characteristic.UUID, descriptor.value); }]; //過濾器 //設置查找設備的過濾器 [baby setDiscoverPeripheralsFilter:^BOOL(NSString *peripheralsFilter) { //設置查找規則是名稱大於1 , the search rule is peripheral.name length > 1 if (peripheralsFilter.length >1) { return YES; } return NO; }]; //設置鏈接的設備的過濾器 __block BOOL isFirst = YES; [baby setFilterOnConnetToPeripherals:^BOOL(NSString *peripheralName) { //這裏的規則是:鏈接第一個AAA打頭的設備 if(isFirst && [peripheralName hasPrefix:@"AAA"]){ isFirst = NO; return YES; } return NO; }]; } 

CoreBluetooch中實現上掃描,鏈接,發現服務和characteristic以及它的值相關方法調用是很麻煩囉嗦凌亂的。以下: centralManager啓動->狀態委託->調用掃描方法->進入掃描到設備的委託->調用鏈接設備方法->進入鏈接到設備的委託->發現服務方法->發現服務委託-> 發現characteristic方法->發現characteristic委託->讀characteristic的value->讀characteristic的value的委託->讀description,讀description的value-> ….的委託框架

而BabyBluetooth只須要一句話就執行了上面的內容。學習

//掃描設備 而後讀取服務,而後讀取characteristics名稱和值和屬性,獲取characteristics對應的description的名稱和值 baby.scanForPeripherals().connectToPeripheral().discoverServices() .discoverCharacteristics().readValueForCharacteristic().discoverDescriptorsForCharacteristic() .readValueForDescriptors().begin(); 

另外一方面,BabyBluetooth全部的委託方法都緊湊的聚在了一塊兒。此外,快速示例中沒有包括channel的使用,若是包括了channel,那麼ios幾個頁面或者組件的藍牙 調用模塊均可以寫在一塊兒,看起來就以爲很方便。優化

相關文章
相關標籤/搜索