CoreBluetooth For Central (2)

BLE Status

CoreBluetooth提供的Framework物件內容都是以CB開頭命名,以下內容以CB代表CoreBluetooth,CB提供CBCentralManagerDelegate讓我們得知目前Bluetooth的狀態,從之後可以做一些互動機制提供使用者參考。

在使用CBCentralManagerDelegate之前我們要先宣告CBCentralManager,這物件用來管理在Central模式時,也提供Bluetooth狀態及一些功能,這個章節可以完成讀取Bluetooth的狀態,並利用NSLog印出來。

ViewController.h

//-----------start-----------
    @interface ViewController : UIViewController <CBCentralManagerDelegate> {

    }

    @property (nonatomic,strong) CBCentralManager *CM;
    @property (nonatomic,strong) CBPeripheral *connectedPeripheral;

    @end


//------------end------------

ViewController.m

初始化CBCentralManager,並將delegate設定為ViewController

//-----------start-----------
    #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];

    }
//------------end------------

增加狀態的Delegate 「centralManagerDidUpdateState」,Bluetooth狀態有改變時都會呼叫此method,總共有六種狀態。

//-----------start-----------
    -(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);
    }

//------------end------------

除了可以利用Delegate方式在狀態變動時立即知道目前的狀態,當然也可以在當下直接使用Method的方式取得訊息

CM.state

加上這些功能後,執行一下看看結果:

    2014-01-20 14:44:50.689 BluetoothLE Status[13633:70b] UpdateState:Unsupported

如果您是iPhone4或iPad2之前的機器,那執行的結果就會是** CBCentralManagerStateUnsupported**,無法支援的狀態,在您的機器有支援下,大部分都會是「CBCentralManagerStatePoweredOff/CBCentralManagerStatePoweredOn」,有開Bluetooth與未開Bluetooth。

範例程式