BLE Status
CoreBluetooth提供的Framework物件內容都是以CB開頭命名,以下內容以CB代表CoreBluetooth,CB提供CBCentralManagerDelegate讓我們得知目前Bluetooth的狀態,從之後可以做一些互動機制提供使用者參考。
在使用CBCentralManagerDelegate之前我們要先宣告CBCentralManager,這物件用來管理在Central模式時,也提供Bluetooth狀態及一些功能,這個章節可以完成讀取Bluetooth的狀態,並利用NSLog印出來。
ViewController.h
@interface ViewController : UIViewController <CBCentralManagerDelegate> {
}
@property (nonatomic,strong) CBCentralManager *CM;
@property (nonatomic,strong) CBPeripheral *connectedPeripheral;
@end
ViewController.m
初始化CBCentralManager,並將delegate設定為ViewController
#import "ViewController.h"
@interface ViewController ()
{
}
@end
@implementation ViewController
@synthesize CM;
@synthesize connectedPeripheral;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CM= [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}
增加狀態的Delegate 「centralManagerDidUpdateState」,Bluetooth狀態有改變時都會呼叫此method,總共有六種狀態。
-(void)centralManagerDidUpdateState:(CBCentralManager*)cManager
{
NSMutableString* nsmstring=[NSMutableString stringWithString:@"UpdateState:"];
BOOL isWork=FALSE;
switch (cManager.state) {
case CBCentralManagerStateUnknown:
[nsmstring appendString:@"Unknown\n"];
break;
case CBCentralManagerStateUnsupported:
[nsmstring appendString:@"Unsupported\n"];
break;
case CBCentralManagerStateUnauthorized:
[nsmstring appendString:@"Unauthorized\n"];
break;
case CBCentralManagerStateResetting:
[nsmstring appendString:@"Resetting\n"];
break;
case CBCentralManagerStatePoweredOff:
[nsmstring appendString:@"PoweredOff\n"];
break;
case CBCentralManagerStatePoweredOn:
[nsmstring appendString:@"PoweredOn\n"];
isWork=TRUE;
break;
default:
[nsmstring appendString:@"none\n"];
break;
}
NSLog(@"%@",nsmstring);
}
除了可以利用Delegate方式在狀態變動時立即知道目前的狀態,當然也可以在當下直接使用Method的方式取得訊息
CM.state
加上這些功能後,執行一下看看結果:
2014-01-20 14:44:50.689 BluetoothLE Status[13633:70b] UpdateState:Unsupported
如果您是iPhone4或iPad2之前的機器,那執行的結果就會是** CBCentralManagerStateUnsupported**,無法支援的狀態,在您的機器有支援下,大部分都會是「CBCentralManagerStatePoweredOff/CBCentralManagerStatePoweredOn」,有開Bluetooth與未開Bluetooth。
Trackbacks/Pingbacks