web-dev-qa-db-fra.com

iOS Core Bluetooth: Obtention d'un avertissement concernant une mauvaise utilisation des API

J'écris une application de test sous iOS 7 avec l'API Bluetooth Core. Lors du test de l'application, j'ai constaté le message d'avertissement suivant:

TestBluetooth [626: 60b] CoreBluetooth [API MISUSE] ne peut accepter des commandes que lorsqu'il est allumé.

Plus tard, j'ai débogué de l'application et constaté que l'avertissement venait de la ligne de code suivante:

[manager scanForPeripheralsWithServices:array options:scanOptions];

Quelqu'un peut-il donc me dire pourquoi je reçois ce message dans la console? 

Il y a des périphériques Android bluetooth 4.0 autour de moi, mais cette application ne les découvre pas comme périphérique. Alors, pourquoi ne pas découvrir les périphériques Android bluetooth 4.0 LE en tant que périphériques?

35
Yogesh Kulkarni

Vous devez attendre que le rappel [-CBCentralManagerDelegate centralManagerDidUpdateState:] ait été appelé. Et ensuite, vérifiez que l'état est PoweredOn avant de commencer à rechercher les périphériques.

59
Etan

Veuillez utiliser le code suivant pour résoudre l'avertissement:

(Vous pouvez faire référence au code dans 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;
        }
    }
}
2
oOEric

Effectuez une numérisation lorsque Bluetooth est sous tension:

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