Подтвердить что ты не робот

iOS Core Bluetooth: получение API MISUSE Предупреждение

Я пишу тестовое приложение в iOS 7 с Core Bluetooth API. При тестировании приложения я обнаружил, что получаю следующее предупреждение:

TestBluetooth [626: 60b] CoreBluetooth [API MISUSE] может принимать команды только во включенном состоянии

Позже я отладил приложение и обнаружил, что предупреждение исходит из следующей строки кода:

[manager scanForPeripheralsWithServices:array options:scanOptions];

Так может кто-нибудь сказать мне, почему я получаю это сообщение в консоли?

Вокруг меня есть Android-устройства Bluetooth 4.0, но это приложение не воспринимает их как периферийное устройство. Так почему же он не обнаруживает устройства Bluetooth 4.0 LE Android в качестве периферийных устройств?

4b9b3361

Ответ 1

Вам нужно подождать, пока не будет вызван обратный вызов [-CBCentralManagerDelegate centralManagerDidUpdateState:]. Затем проверьте, что состояние PoweredOn прежде чем начинать сканирование периферийных устройств.

Ответ 2

Пожалуйста, используйте следующий код для устранения предупреждения:

(Вы можете сослаться на код в https://github.com/luoxubin/BlueTooth4.0)

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;
        }
    }
}

Ответ 3

Сканирование при включенном 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)
        }
    }