HKBabaybluetooth
基於BabyBluetooth開源庫的二次封裝,幾行代碼搞定iOS藍牙開發。
📃功能:
包括但不僅限於:
1、檢測權限。
2、掃描設備。
3、發現設備。
4、連接設備。
5、斷開設備。
6、收發消息。適用於一般情況下的藍牙開發。
🔨使用:
1 - 首先將工程中的“HKBLE”文件夾拷貝至項目中。
2 - 在需要使用的類中引入頭文件:
#import "HKBabyBluetoothManager.h"
3 - 創建一個全局對象:
{
HKBabyBluetoothManager *_babyMgr;
}
4 - 初始化並設置代理:
_babyMgr = [HKBabyBluetoothManager sharedManager];
_babyMgr.delegate = self;
5 - 遵守HKBabyBluetoothManageDelegate代理:
<HKBabyBluetoothManageDelegate>
6 - 以下為HKBabyBluetoothManageDelegate代理的方法回調:
6.1 - 如果系統藍牙未打開:
- (void)systemBluetoothClose {
// 系統藍牙被關閉、提示用戶去開啟藍牙 }
6.2 - 系統藍牙權限已開啟調用掃描設備:
- (void)sysytemBluetoothOpen {
// 系統藍牙已開啟、開始掃描周邊的藍牙設備 [_babyMgr startScanPeripheral]; }
6.3 - 獲取周邊被掃描到的設備、加到設備數據源中:
- (void)getScanResultPeripherals:(NSArray *)peripheralInfoArr { // 這里獲取到掃描到的藍牙外設數組、添加至數據源中 if (self.dataSource.count>0) { [self.dataSource removeAllObjects]; } [self.dataSource addObjectsFromArray:peripheralInfoArr]; [self.tableView reloadData]; }
6.4 - 點擊連接所需要連接的設備:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; HKPeripheralInfo *info = self.dataSource[indexPath.row]; // 去連接當前選擇的Peripheral [_babyMgr connectPeripheral:info.peripheral]; }
6.5 - 連接成功或連接失敗:
- (void)connectSuccess {
// 連接成功 寫入UUID值【替換成自己的藍牙設備UUID值】 _babyMgr.serverUUIDString = @"XXXX-XXXX-XXXX-XXXX"; _babyMgr.writeUUIDString = @"YYYY-YYYY-YYYY-YYYY"; _babyMgr.readUUIDString = @"ZZZZ-ZZZZ-ZZZZ-ZZZZ"; } - (void)connectFailed { // 連接失敗、做連接失敗的處理 }
6.6 - 消息數據的讀寫:
- (IBAction)sendAction:(UIButton *)sender {
// 向藍牙發數據 轉化為data類型 Byte byte[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; NSData *data = [[NSData dataWithBytes:&byte length:sizeof(&byte)] subdataWithRange:NSMakeRange(0, 8)]; [_babyMgr write:data]; } - (void)readData:(NSData *)valueData { // 獲取到藍牙設備發來的數據 NSLog(@"藍牙發來的數據 = %@",[NSString stringWithFormat:@"%@",valueData]); }
6.7 - 斷開藍牙設備:
- (IBAction)disconnectAction:(UIButton *)sender {
// 斷開連接 // 1、可以選擇斷開所有設備 // 2、也選擇斷開當前peripheral [_babyMgr disconnectAllPeripherals]; //[_babyMgr disconnectLastPeripheral:(CBPeripheral *)]; }
6.8 - 設備斷開后回調:
- (void)disconnectPeripheral:(CBPeripheral *)peripheral {
// 獲取到當前斷開的設備 這里可做斷開UI提示處理 }
6.9 - 自動連接:
如果需求有要求上一次連接使用過的藍牙設備在下一次使用時能夠自動連接上,我們可以這樣處理:
1、在連接藍牙設備成功后將藍牙設備的id值存儲在沙盒下。
2、在獲取到掃描的設備數組的地方,對藍牙設備數組的id進行遍歷,如果存在與沙盒下緩存的藍牙設備id一致,則對當前設備進行連接。這樣就能做到自動連接設備的效果了。
⛓️接口:
// 設置藍牙的前綴【開發者必須改為自己的藍牙設備前綴】 #define kMyDevicePrefix (@"myDevice") // 設置藍牙的channel值【開發者可不做修改】 #define channelOnPeropheralView @"peripheralView" @protocol HKBabyBluetoothManageDelegate <NSObject> @optional /** 藍牙被關閉 */ - (void)systemBluetoothClose; /** 藍牙已開啟 */ - (void)sysytemBluetoothOpen; /** 掃描到的設備回調 @param peripheralInfoArr 掃描到的藍牙設備數組 */ - (void)getScanResultPeripherals:(NSArray *)peripheralInfoArr; /** 連接成功 */ - (void)connectSuccess; /** 連接失敗 */ - (void)connectFailed; /** 當前斷開的設備 @param peripheral 斷開的peripheral信息 */ - (void)disconnectPeripheral:(CBPeripheral *)peripheral; /** 讀取藍牙數據 @param valueData 藍牙設備發送過來的data數據 */ - (void)readData:(NSData *)valueData; @end @interface HKBabyBluetoothManager : NSObject //外設的服務UUID值 @property (nonatomic, copy) NSString *serverUUIDString; //外設的寫入UUID值 @property (nonatomic, copy) NSString *writeUUIDString; //外設的讀取UUID值 @property (nonatomic, copy) NSString *readUUIDString; /** 單例 @return 單例對象 */ + (HKBabyBluetoothManager *)sharedManager; @property (nonatomic, weak) id<HKBabyBluetoothManageDelegate> delegate; /** 開始掃描周邊藍牙設備 */ - (void)startScanPeripheral; /** 停止掃描 */ - (void)stopScanPeripheral; /** 連接所選取的藍牙外設 @param peripheral 所選擇藍牙外設的perioheral */ -(void)connectPeripheral:(CBPeripheral *)peripheral; /** 獲取當前連接成功的藍牙設備數組 @return 返回當前所連接成功藍牙設備數組 */ - (NSArray *)getCurrentPeripherals; /** 獲取設備的服務跟特征值 當已連接成功時調用有效 */ - (void)searchServerAndCharacteristicUUID; /** 斷開當前連接的所有藍牙設備 */ - (void)disconnectAllPeripherals; /** 斷開所選擇的藍牙設備 @param peripheral 所選擇藍牙外設的perioheral */ - (void)disconnectLastPeripheral:(CBPeripheral *)peripheral; /** 向藍牙設備發送數據 @param msgData 數據data值 */ - (void)write:(NSData *)msgData;
⚠️注意:
Demo已將BabyBluetooth開源庫移除,如需運行Demo請使用CocoaPods將BabyBluetooth庫導入工程中。(Demo中使用的BabyBluetooth開源庫的版本是:0.7.0)