it-swarm.com.de

iOS Core Bluetooth: API MISUSE-Warnung abrufen

Ich schreibe eine Test-App in iOS 7 mit der Core Bluetooth API. Beim Testen der Anwendung habe ich festgestellt, dass die folgende Warnmeldung angezeigt wird:

TestBluetooth [626: 60b] CoreBluetooth [API MISUSE] kann Befehle nur im eingeschalteten Zustand annehmen

Später debattierte ich die App und stellte fest, dass die Warnung aus der folgenden Codezeile stammt:

[manager scanForPeripheralsWithServices:array options:scanOptions];

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

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

35
Yogesh Kulkarni

Sie müssen warten, bis der [-CBCentralManagerDelegate centralManagerDidUpdateState:]-Callback aufgerufen wurde. Vergewissern Sie sich dann, dass der Status PoweredOn ist, bevor Sie mit der Suche nach Peripheriegeräten beginnen.

59
Etan

Bitte verwenden Sie den folgenden Code, um die Warnung zu beheben:

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

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

Scannen Sie, wenn Bluetooth eingeschaltet ist.

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