我正在尝试使用Swift从iOS 8.1+设备进行广播。当我运行应用程序时,它成功广播 ...但只有一秒钟。我知道这是因为,从另一台带有'扫描仪'应用程序的设备,我看到了灯塔出现; “开机”的打印声明也按预期显示。
我在peripheralManagerDidUpdateState
中有其他打印语句,但它们从未被调用过,所以我不知道为什么广播停止这么快。
我不尝试做任何花哨的事情(监视区域,确定接近度,在后台广播等) - 这只是一个普通的,普通的iBeacon从前台发送。
import CoreBluetooth
class ViewController: UIViewController, CBPeripheralManagerDelegate {
var beaconRegion = CLBeaconRegion()
var beaconData = NSDictionary()
var beaconManager = CBPeripheralManager()
...
随后:
self.beaconRegion = CLBeaconRegion(proximityUUID: bleUuid,
major: bleMajor,
minor: bleMinor,
identifier: "com.please.work")
稍后,发起广播:
self.beaconData = self.beaconRegion.peripheralDataWithMeasuredPower(nil)
self.beaconManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
代表:
func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager!) {
if(peripheral.state == CBPeripheralManagerState.PoweredOn) {
println("powered on")
self.beaconManager.startAdvertising(self.beaconData)
} else if(peripheral.state == CBPeripheralManagerState.PoweredOff) {
println("powered off")
self.beaconManager.stopAdvertising()
}
else {
println("something else changed")
}
}
更新
这可能是由于我的设备(iPhone 6)出现问题;这是我的观察:
重新启动设备可以解决问题。
我在普通应用中看到了现象。首先,我开始发布:iBeacon Emitter app。然后(在另一台设备上),我用这个iBeacon Scanner app注册UUID和监视器。设备出现,但在〜分钟后,它会消失。此后,如果我切换发射设备,我会看到我正在排除故障的快速开/关行为。
更多关注,这种行为发生在各种应用中。如果我重新启动(并清除问题,请参阅#1),然后导致问题(请参阅#2)......然后通过其他发射器/扫描仪应用程序显示问题。
答案 0 :(得分:2)
我将此问题诊断为"Knock to Unlock" app与某种低级蓝牙冲突。
"敲开解锁"使用BLE与计算机进行双向通信。在我卸载应用程序的那一刻,问题就解决了。我希望这可以使同一案件中的某人有点恶化。
答案 1 :(得分:0)
一些想法:
您确定CBPeripheralManager
实例不会超出范围或被覆盖并进行垃圾回收,您的ViewController是否仍在前台并且屏幕未锁定?
尝试使用免费Locate应用程序之类的其他发射器应用程序来验证它不是设备特定问题。
如果定位应用在同一设备上运行,那么您的应用中必须有其他内容在以后干扰广播。也许您可以在Github或其他地方共享代码,以便其他人可以测试。