2016-12-18 10 views
5

Próbuję wykryć, czy Bluetooth iPhone'a użytkownika jest włączony lub wyłączony. Jeśli jest wyłączony, chcę wysłać powiadomienie do użytkownika, aby go włączyć. tej pory zrobiłem tak:Jak wykryć, czy Bluetooth iPhone'a użytkownika jest wyłączony czy włączony?

import CoreBluetooth 

    class ViewController: UIViewController, CLLocationManagerDelegate,AVCaptureMetadataOutputObjectsDelegate,CBManager { 

var myBTManager = CBPeripheralManager(delegate: self, queue: nil, options: nil) 

    } 

func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager!) { 
    print(#function) 
    if peripheral.state == CBManagerState.poweredOn { 
     print("Broadcasting...") 

    // myBTManager!.startAdvertising(_broadcastBeaconDict) 
    } else if peripheral.state == CBManagerState.poweredOff { 
     print("Stopped") 
     myBTManager!.stopAdvertising() 
    } else if peripheral.state == CBManagerState.unsupported { 
     print("Unsupported") 
    } else if peripheral.state == CBManagerState.unauthorized { 
     print("This option is not allowed by your application") 
    } 
} 

Ale jak widać z rysunku, coś jest nie tak. enter image description here

Czy mógłbyś mi pomóc, jak rozwiązać ten problem, jestem nowy na szybką technologię CoreBluetooth. Używam również funkcji zasięgu do wykrywania połączenia Wi-Fi, więc jeśli działa również na Bluetooth, wolałbym wtedy użyć opcji zasięgu.

Odpowiedz

4
  1. Powinieneś wdrażania protokołu CBPeripheralManagerDelegate, więc zastąpić CBManager w linii definicji class z CBPeripheralManagerDelegate.

  2. w Swift 3, podpis peripheralManagerDidUpdateState jest teraz:

    func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) 
    
  3. Nie można zainicjować CBPeripheralManager podczas tworzenia klasy od self jest dostępna tylko po klasa została zainicjowana. Zamiast tworzyć swoją właściwość:

    var myBTManager: CBPeripheralManager? 
    

    i zainicjować w viewDidLoad:

    override func viewDidLoad() { 
        ...  
        myBTManager = CBPeripheralManager(delegate: self, queue: nil, options: nil) 
        ... 
    } 
    
0

Można użyć metody CBCentralMangerDelegate:

public func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) { 
      if central.state == .poweredOn { 
       //Bluetooth is on 
      } else if central.state == .poweredOff { 
       //Bluetooth is off 
      } 
    } 
Powiązane problemy