swift - CoreBluetooth peripheralManager 广告在后台停止
问题描述
我想将 ıos 手机用作 ibeacon。我使用了以下代码。广告在应用程序在前台时开始,但在屏幕锁定或应用程序在后台时不起作用。我使用了 BackgroundModes“充当蓝牙 LE 配件”和“蓝牙外设使用说明”。
var localBeacon: CLBeaconRegion!
var beaconPeripheralData: NSDictionary!
var peripheralManager: CBPeripheralManager!
let localBeaconUUID = "XXX"
let localBeaconMajor: CLBeaconMajorValue = 0
let localBeaconMinor: CLBeaconMinorValue = 0
let identifier = "allbeacons"
override init() {
super.init()
}
func initLocalBeacon() {
if localBeacon != nil {
stopLocalBeacon()
}
let uuid = UUID(uuidString: localBeaconUUID)!
localBeacon = CLBeaconRegion(proximityUUID: uuid, major: localBeaconMajor, minor: localBeaconMinor, identifier: identifier)
beaconPeripheralData = localBeacon.peripheralData(withMeasuredPower: nil)
peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
}
func stopLocalBeacon() {
peripheralManager.stopAdvertising()
peripheralManager = nil
beaconPeripheralData = nil
localBeacon = nil
}
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
if peripheral.state == .poweredOn {
peripheralManager.startAdvertising(beaconPeripheralData as? [String: Any])
}
else if peripheral.state == .poweredOff {
peripheralManager.stopAdvertising()
}
}
解决方案
推荐阅读
- sorting - 使用 awk one-liner 从所需文件开始重新排列文件
- swift - Pod 更新后的 Xcode 构建错误
- c# - What is difference between socket.receive(buff,0,buff.length) and socket.receive(buff, buff.length,0)?
- go - Optimal way to add or remove slice element in Go without broke elements order
- python - 深度神经网络学习函数 f(x) = x^2
- javascript - Best way to check if some coordinate is contained in an array (JavaScript)
- types - Type aliasing for multiple traits with generic types
- ipv6 - Java IPv6 segment validation
- python - 将一个系列分成两个不同的列
- java - 通用二叉搜索树未正确添加新节点(Java)