學(xué)習(xí)CoreBluetooth
中,自己封裝了一個簡單的工具類,用來統(tǒng)一處理分散的CBCentralManager
和CBPeripheral
代理方法,同時加一些自己的功能,比如直接通過封裝的工具類實時的獲取設(shè)備的藍牙狀態(tài)
和連接狀態(tài)
/** 設(shè)備藍牙啟用 */
@property (nonatomic,assign,getter=deviceBluetoothIsOn) BOOL deviceBluetoothOn;
/** 連接狀態(tài) */
@property (nonatomic,assign,getter=deviceIsConnecting) BOOL deviceConnecting;
目前寫了一個檢索藍牙狀態(tài)的功能:程序一啟動就需要定時不斷的檢索藍牙狀態(tài)
- 大概的邏輯是這樣:
藍牙狀態(tài)檢索.png
其中alert提示框
就是一個自定義的alertController
,取代系統(tǒng)默認的那個只有設(shè)置
和好
選項的提醒,提高用戶對下一步操作的辨識度,當(dāng)同于后,會自動跳到系統(tǒng)藍牙設(shè)置
界面,實現(xiàn)指導(dǎo)用戶開啟藍牙的一個過程
關(guān)鍵部分示例代碼:
+ (void)load {
// 程序一啟動就開始獲取設(shè)備狀態(tài) (默認一啟動時設(shè)備狀態(tài)為未知,暫時這里手動調(diào)用了一下獲取設(shè)備狀態(tài)的協(xié)議方法)
[[JSBluetoothManager sharedManager] centralManagerDidUpdateState:[JSBluetoothManager sharedManager].centralManager];
[JSBluetoothManager sharedManager].timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(getCentralDeviceState) userInfo:nil repeats:YES];
}
+ (void)getCentralDeviceState
{
JSBluetoothManager *manager = [JSBluetoothManager sharedManager];
BOOL isOn = manager.centralManager.state == CBCentralManagerStatePoweredOn;
manager.deviceBluetoothOn = isOn;
NSLog(@"設(shè)備啟用狀態(tài):%zd,設(shè)備連接狀態(tài):%zd",manager.deviceBluetoothIsOn,manager.deviceIsConnecting);
// 藍牙關(guān)閉
if (!isOn) {
// 自定義alert提示框已在界面中顯示 || 當(dāng)前應(yīng)用不再前臺 不做任何處理
UIApplicationState appState = [UIApplication sharedApplication].applicationState;
if (manager.alertController || appState != UIApplicationStateActive) {
return;
}
// 提示藍牙關(guān)閉
[manager noticeUserToOpenBluetoothService];
} else {
// 藍牙開啟
BOOL isConnected = manager.deviceIsConnecting;
if (isConnected) {
// 開啟并連接狀態(tài)
NSLog(@"--->當(dāng)前設(shè)備處于連接狀態(tài)");
} else {
// 開啟但斷開連接狀態(tài)
// 如果有綁定設(shè)備,自動搜索并連接
if (manager.peripheral) {
[manager.centralManager connectPeripheral:manager.peripheral options:nil];
NSLog(@"---->重新連接到設(shè)備");
}
}
}
}