ios länge - Wie man den Status von Bluetooth (ON / OFF) im iphone programmatisch erhält





google title (6)


Ein wenig Nachforschung über Sams Antwort , von der ich dachte, dass ich sie teilen würde. Sie können dies tun, ohne private API zu verwenden, aber mit ein paar Vorbehalten:

  • Es funktioniert nur auf iOS 5.0 und höher
  • Es funktioniert nur auf Geräten, die die Bluetooth LE-Spezifikation unterstützen (iPhone 4S +, 5. Generation iPod +, iPad 3. Generation +)
  • Wenn Sie die Klasse einfach zuweisen, wird Ihre Anwendung aufgefordert, die Verwendung des Bluetooth-Stacks vom Benutzer zu verlangen (was nicht erwünscht ist). Wenn sie sich weigern, sehen Sie nur CBCentralManagerStateUnauthorized
  • Der Abruf des Bluetooth-Status erfolgt asynchron und kontinuierlich. Sie müssen einen Delegaten einrichten, um Statusänderungen zu erhalten, da die Überprüfung des Status eines frisch zugewiesenen Bluetooth-Managers CBCentralManagerStateUnknown zurückgibt

Davon abgesehen scheint diese Methode Echtzeit-Updates des Bluetooth-Stack-Status zu bieten.

Nach dem Einbinden des CoreBluetooth-Frameworks

#import <CoreBluetooth/CoreBluetooth.h>

Diese Tests waren einfach durchzuführen mit:

- (void)detectBluetooth
{
    if(!self.bluetoothManager)
    {
        // Put on main queue so we can call UIAlertView from delegate callbacks.
        self.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];
    }
    [self centralManagerDidUpdateState:self.bluetoothManager]; // Show initial state
}

- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
    NSString *stateString = nil;
    switch(self.bluetoothManager.state)
    {
        case CBCentralManagerStateResetting: stateString = @"The connection with the system service was momentarily lost, update imminent."; break;
        case CBCentralManagerStateUnsupported: stateString = @"The platform doesn't support Bluetooth Low Energy."; break;
        case CBCentralManagerStateUnauthorized: stateString = @"The app is not authorized to use Bluetooth Low Energy."; break;
        case CBCentralManagerStatePoweredOff: stateString = @"Bluetooth is currently powered off."; break;
        case CBCentralManagerStatePoweredOn: stateString = @"Bluetooth is currently powered on and available to use."; break;
        default: stateString = @"State unknown, update imminent."; break;
    }
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Bluetooth state"
                                                     message:stateString
                                                    delegate:nil
                                          cancelButtonTitle:@"ok" otherButtonTitles: nil];
    [alert show];
}

Ich versuche, den Status von iPhone / iPod Bluetooth zu erhalten, ob es programmgesteuert oder ausgeschaltet ist. Ist es möglich, eine Apple API oder eine API von Drittanbietern zu verwenden?




Diese Antwort wurde vom ursprünglichen Objective-C auf Swift 4.0 aktualisiert.

Es wird angenommen, dass Sie bereits einen Bluetooth-Manager erstellt und den Delegate der ViewController Klasse ViewController .

import CoreBluetooth

extension ViewController : CBCentralManagerDelegate {
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central.state {
        case .poweredOn:
            print("powered on")
        case .poweredOff:
            print("powered off")
        case .resetting:
            print("resetting")
        case .unauthorized:
            print("unauthorized")
        case .unsupported:
            print("unsupported")
        case .unknown:
            print("unknown")
        }
    }
}



Um die Standard-Warnmeldung zu deaktivieren, müssen Sie beim Instanziieren des CBPeripheralManager nur ein Optionswörterbuch durchlaufen:

SWIFT getestet auf iOS8 +

import CoreBluetooth

//Define class variable in your VC/AppDelegate
var bluetoothPeripheralManager: CBPeripheralManager?

 //On viewDidLoad/didFinishLaunchingWithOptions
let options = [CBCentralManagerOptionShowPowerAlertKey:0] //<-this is the magic bit!
bluetoothPeripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: options)

Natürlich müssen Sie auch die CKManagerDelegate-Delegate-Methode peripheralManagerDidUpdateState wie oben beschrieben implementieren:

func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager!) {

    var statusMessage = ""

    switch peripheral.state {
    case .poweredOn:
        statusMessage = "Bluetooth Status: Turned On"

    case .poweredOff:
        statusMessage = "Bluetooth Status: Turned Off"

    case .resetting:
        statusMessage = "Bluetooth Status: Resetting"

    case .unauthorized:
        statusMessage = "Bluetooth Status: Not Authorized"

    case .unsupported:
        statusMessage = "Bluetooth Status: Not Supported"

    case .unknown:
        statusMessage = "Bluetooth Status: Unknown"
    }

    print(statusMessage)

    if peripheral.state == .poweredOff {
        //TODO: Update this property in an App Manager class
    }
}



Es gibt einen Weg auf iOS 5 und höher mit CoreBluetooth. Die Klasse, die Sie verwenden können, ist CBCentralManager. Es verfügt über eine Eigenschaft "Status", die Sie überprüfen können, ob Bluetooth aktiviert ist oder nicht. (Der Enum CBCentralManagerState hat die Werte, die Sie überprüfen möchten).




Diese Lösung ist etwas alt, bevor Apple Core Bluetooth eingeführt

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.


        Class BluetoothManager = objc_getClass( "BluetoothManager" ) ;
        id btCont = [BluetoothManager sharedInstance] ;
        [self performSelector:@selector(status:) withObject:btCont afterDelay:1.0f] ;

        return YES ;
    }


    - (void)status:(id)btCont
    {
        BOOL currentState = [btCont enabled] ;
        //check the value of currentState 

    }



Sie müssen die TintColor der gesamten App einstellen.

self.window.tintColor = [UIColor redColor];

Oder in Swift 3:

self.window?.tintColor = UIColor.blue

Quelle: iOS 7 UI-Übergangshandbuch







ios iphone bluetooth iobluetooth