2013-06-18 82 views
3

我想用CoreBluetooth(如我的应用程序必须符合在App Store)检查所有当前配对并连接蓝牙设备。这不应该需要任何蓝牙扫描,对吧?我只想看看系统配对了什么。如果我不能这样做,扫描是第二种选择。(IOS)如何检查的iPhone的配对的蓝牙设备?

我试图不工作。它表示蓝牙未通电并崩溃,但CBCentralManager的状态为开启!任何想法如何解决这个问题,还是我完全偏离轨道?

所有这一切都在视图控制器现在:

- (void)viewDidLoad{ 

    [super viewDidLoad]; 
    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()]; 

    [self.centralManager retrieveConnectedPeripherals]; //makes the system call didRetrieveConnectedPeripherals 
} 

- (void)centralManager:(CBCentralManager *)central didRetrieveConnectedPeripherals:(NSArray *)peripherals{ 
    NSLog(@"didRetrieveConnectedPeripherals called"); 
    for (CBPeripheral *a in peripherals){ 
     NSLog(a.name); //just log the name for now to see if it recognized it 
    } //but it never ends up logging anything, and I have a BT keyboard paired/connected with the iPhone 5 
} //and I get an error at some point, <CBConcreteCentralManager: 0x71ab020> is not powered on 

- (void)centralManagerDidUpdateState:(CBCentralManager *)manager{ 
    if ([manager state] == CBCentralManagerStatePoweredOff) NSLog(@"CBCentralManagerStatePoweredOff"); 
    if ([manager state] == CBCentralManagerStatePoweredOn) NSLog(@"CBCentralManagerStatePoweredOn"); //this is what gets logged when I run it on an iPhone 5 
    if ([manager state] == CBCentralManagerStateResetting) NSLog(@"CBCentralManagerStateResetting"); 
    if ([manager state] == CBCentralManagerStateUnauthorized) NSLog(@"CBCentralManagerStateUnauthorized"); 
    if ([manager state] == CBCentralManagerStateUnknown) NSLog(@"CBCentralManagerStateUnknown"); 
    if ([manager state] == CBCentralManagerStateUnsupported) NSLog(@"CBCentralManagerStateUnsupported"); 
} 

回答

0

我一直在工作,这也,并希望一些我学到的东西会有所帮助。

几件事情:

1)你可能得到,因为你在初始化CBCentralManager后立即调用[self.central retrieveConnectedPeripherals]“蓝牙不通电”的错误。您需要让CBCentralManager有足够的时间连接到蓝牙硬件。

试试这个,

- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 
} 
- (void)centralManagerDidUpdateState:(CBCentralManager *)manager { 
    switch (manager.state) { 
     case CBCentralManagerStatePoweredOn: 
      NSLog(@"CBCentral Manager powered on"); 
      [self.centralManager retrieveConnectedPeripherals]; 
      break; 
     case CBCentralManagerStatePoweredOff: 
      ...etc. 
} 

而且,要知道,CBCentralManager适用于与蓝牙4.0的iOS设备。目前,蓝牙4安装在iPhone 4S/5,iPod 4和iPad 3/4/mini上。因此,请注意,您的应用程序无法在iPad 1/2,iPhone 2/3和iPod 2/3上运行。

还是搞清楚了这一点,但它也有可能是你可能看不到你的键盘,因为它不是一个蓝牙设备4。让我知道你发现了什么。