I want to check if Bluetooth is enabled on my device and print the status to the console. My class conforms to CBPeripheralManagerDelegate
and I have no errors. I read the documentation and I implemented the peripheralManagerDidUpdateState
function but it never gets called. My understanding is that function is called when Bluetooth's availability changes. So if I turn Bluetooth off that function should be called and then should be called again once I turn Bluetooth back on. But that doesn't happen. I saw another question that had the same problem but the solution was written in Objective-C and didn't solve my problem.
When I run this code in viewDidLoad
it returns unknown
and I don't know why. I expected it to return powered on
:
cbManager.delegate = self
if cbManager.state == .PoweredOn {
println("powered on")
} else if cbManager.state == .Unauthorized {
println("unauthorized")
} else if cbManager.state == .Unknown {
println("unknown")
} else if cbManager.state == .PoweredOff {
println("pow off")
} else if cbManager.state == .Unsupported {
println("unsupported")
}
I declare cbManager
outside of viewDidLoad
because if I don't the peripheralManagerDidUpdateState
doesn't recognize the manager.
That other question's problem was "the object myPeripheralManager is deallocated as soon as viewDidLoad method returns". I think that's my problem too but I don't know how to fix it.
Here's my manager declaration:
let cbManager = CBPeripheralManager()
which is outside of viewDidLoad
.
Thanks!
UPDATE:
After many hours I think I have found the problem. I don't know if this is why it didn't work but it works now. I was using a CBPeripheralManager
when I should've been using a CBCentralManager
. This question helped show me (even though it was a completely different problem) the difference between a central and peripheral manager.
UPDATE #2:
Also, the manager that was being passed into peripheralManagerDidUpdateState
was different than the manager I was using in the function itself. This in combination with using the wrong manager caused the problems. Hope this helps someone!