3

現在ペアリングおよび接続されているすべての Bluetooth デバイスを確認するために、CoreBluetooth を使用したいと考えています (私のアプリは App Store に対応している必要があります)。これには Bluetooth スキャンは必要ありませんよね?システムとペアになっているものを確認したいだけです。それができない場合は、スキャンが 2 番目のオプションです。

私がしようとしていることはうまくいきません。Bluetooth の電源がオンになっておらずクラッシュすると表示されますが、CBCentralManager の状態はオンです。これを修正する方法についてのアイデアはありますか、それとも完全に軌道から外れていますか?

今のところViewControllerのこれらすべて:

    - (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");
}
4

1 に答える 1

0

私もこれに取り組んできましたが、学んだことのいくつかが役立つことを願っています.

いくつかのこと:

[self.central retrieveConnectedPeripherals]1) CBCentralManager を初期化した直後に呼び出しているため、「Bluetooth の電源が入っていません」というエラーが発生する可能性があります。CBCentralManager が Bluetooth ハードウェアに接続するのに十分な時間を与える必要があります。

代わりにこれを試してください。

- (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 は Bluetooth 4.0 を搭載した iOS デバイスで動作することに注意してください。現在、Bluetooth 4 は iPhone 4S/5、iPod 4、iPad 3/4/mini に搭載されています。そのため、アプリは iPad 1/2、iPhone 2/3、および iPod 2/3 では動作しないことに注意してください。

これについてはまだ調査中ですが、Bluetooth 4 デバイスではないため、キーボードが表示されない可能性もあります。あなたが見つけたことを教えてください。

于 2013-08-13T19:51:08.713 に答える