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。

范例程式