我有一个应用程序,它是在后台工作。我使用CBPeripheralManager广告和CBCentralManager扫描。我使用两个ıos(IOS 11.3和IOS 13.4.1)设备。第一个是广告前台和后台,第二个是扫描前台和后台。第二个是扫描前景和背景。我可以扫描。
应用程序在后台,手机被解锁 - 工作完美
应用程序在后台,手机被锁定,屏幕被点亮 - 完美的工作。
应用程序在后台,手机锁定,屏幕是关闭的 - 不工作!
* 我检查了它的广告应用程序,运行在后台显示在Android设备*。
是什么问题。请告诉我。如何解决这个问题?我想在后台同时扫描。我的代码如下。
let scanOptions = [
CBCentralManagerScanOptionAllowDuplicatesKey: NSNumber(value: true)
]
let services = [CBUUID(string: "e2c56db5-dffb-48d2-b060-d0f5a71096e0")]
let advertisingData = [
CBAdvertisementDataLocalNameKey: "xxx",
CBAdvertisementDataServiceUUIDsKey:[CBUUID(string: "e2c56db5-dffb-48d2-b060-d0f5a71096e0")]
] as [String : Any]
func initLocal() {
peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
cbCentralManager = CBCentralManager(delegate: self, queue: nil,options: nil)
}
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
if peripheral.state == .poweredOn {
peripheralManager.startAdvertising(advertisingData)
}
else if peripheral.state == .poweredOff {
peripheralManager.stopAdvertising()
}
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn{
central.scanForPeripherals(withServices: services,options:scanOptions)
print("scanning...")
}
else {
print("Bluetooth is not active")
}
}
func centralManager(_ central: CBCentralManager,didDiscover peripheral: CBPeripheral,advertisementData: [String : Any],
rssi RSSI: NSNumber)
{
print("RSSI : \(RSSI)")
}
你似乎在期待重复,因为你已经设置了 CBCentralManagerScanOptionAllowDuplicatesKey
. 该键在后台被忽略。如果你期望通过广告不止一次地看到同一个设备,那是不可能的。不过,发现你以前没见过的新设备应该可以。你有这方面的问题吗?(你应该解释一下你到底是如何测试这个的细节,你看到了什么精确的行为,以及你期望看到什么。蓝牙是非常微妙的。细节相当重要,"不工作 "太模糊了)。)