2014-04-28 9 views
26

Ich schreibe eine Test-App in iOS 7 mit der Core Bluetooth API. Wenn ich die Anwendung am Prüfung fand ich, dass ich die folgende Warnmeldung bin immer:IOS Core Bluetooth: Getting API MISUSE Warnung

2014-04-28 15:52:09.400 TestBluetooth[626:60b] CoreBluetooth[API MISUSE] can only accept commands while in the powered on state

Später gedebuggt ich App und festgestellt, dass, Warnung der folgenden Codezeile kommt:

[manager scanForPeripheralsWithServices:array options:scanOptions];

Also kann mir bitte jemand sagen, warum ich diese Nachricht in der Konsole bekomme?

Es gibt Bluetooth 4.0 Android-Geräte um mich, aber diese App entdeckt sie nicht als Peripheriegerät. Warum entdeckt es also keine Bluetooth 4.0 LE Android-Geräte als Peripheriegeräte?

+2

Sie müssen die '' CBCentralManager' state' Eigenschaft zu überprüfen, bevor ein: https: //developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManager_Class/translated_content/CBCentralManager.html#//apple_ref/occ/instp/CBCentralManager/state – Larme

Antwort

48

Sie müssen warten, bis der Callback [-CBCentralManagerDelegate centralManagerDidUpdateState:] aufgerufen wurde, dann überprüfen Sie, ob der Status PoweredOn ist, bevor Sie nach Peripheriegeräten suchen.

+3

Es ist ein einfacher, aber sehr nützlicher Kommentar. Sieht offensichtlich aus, ist es aber nicht. Dank dafür. – nembleton

+0

np ............ <3 – Etan

+1

Ich habe ein Tool erstellt, mit dem Sie die API-Missbrauchsfehler debuggen können: https://github.com/nrbrook/NBCoreBluetoothAPIMisuseGuard – Nick

1

Bitte benutzen Sie den folgenden Code, um die Warnung zu lösen:

(Sie können in https://github.com/luoxubin/BlueTooth4.0 zum Code verweisen)

if (bluetoothPowerOn) {  //new code 

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

} //new code 


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

     } 

    } 


} 
+0

Sie sind real mvp – CodeMode

Verwandte Themen