web-dev-qa-db-ja.com

iOS Core Bluetooth:API誤用警告の取得

IOS 7でCore Bluetooth APIを使用してテストアプリを作成しています。アプリケーションをテストすると、次の警告メッセージが表示されます。

TestBluetooth [626:60b] CoreBluetooth [API MISUSE]は、電源がオンの状態でのみコマンドを受け入れることができます

後でアプリをデバッグしましたが、次のコード行から警告が出ていることがわかりました。

[manager scanForPeripheralsWithServices:array options:scanOptions];

コンソールでこのメッセージが表示される理由を教えてください。

私の周りにはbluetooth 4.0 Androidデバイスがありますが、このアプリはそれらを周辺デバイスとして検出していません。では、なぜBluetooth 4.0 LE Androidデバイスを周辺機器として検出しないのですか?

40
Yogesh Kulkarni

[-CBCentralManagerDelegate centralManagerDidUpdateState:]コールバックが呼び出されるまで待つ必要があります。そして、周辺機器のスキャンを開始する前に、状態がPoweredOnであることを確認します。

68
Etan

警告を解決するには、次のコードを使用してください。

(コードは https://github.com/luoxubin/BlueTooth4. で参照できます)

if (bluetoothPowerOn) {
    [self.centralManager scanForPeripheralsWithServices:[serviceIDs copy] options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@(NO)}];
}

-(void)centralManagerDidUpdateState:(CBCentralManager *)central{

    switch (central.state) {

        case CBManagerStatePoweredOn:
        {
            bluetoothPowerOn = YES;    //new code
            [self start];
            break;
        }

        default:
        {    
            bluetoothPowerOn = NO;   //new code
            [self stopScan:[NSError hardwareStatusErrorWithMessage:@"Cannot open Bluetooth, please check the setting." hardwareStatus:central.state]];    
            break;
        }
    }
}
2
oOEric

Bluetoothの電源が入っているときにスキャンを実行する:

func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central.state {
        case .unknown:
            print("unknown")
        case .resetting:
            print("resetting")
        case .unsupported:
            print("unsupported")
        case .unauthorized:
            print("unauthorized")
        case .poweredOff:
            print("poweredOff")
            centralManager?.stopScan()
        case .poweredOn:
            print("poweredOn")
            centralManager?.scanForPeripherals(withServices: nil, options: nil)
        }
    }
0
Zaid Pathan