iBeacon广播开始,立即停止
我想从使用Swift的iOS 8.1+设备进行广播。当我运行该应用程序时,它确实成功地播出了 ...但只有一秒钟。我知道这一点,因为从具有“扫描仪”应用的其他设备,我看到信标出现; “打开电源”的打印语句也按预期显示。iBeacon广播开始,立即停止
我在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")
}
}
UPDATE
这可能是由于我的设备(iPhone 6)出现问题;这里是我的观察:
重新启动设备清除问题。
我在正常的应用程序中看到了现象。首先,我开始发布这个:iBeacon Emitter app。然后(在另一台设备上),我注册UUID并用此iBeacon Scanner app进行监视。该设备出现,但〜分钟后,它消失。之后,如果我切换发射设备,我会看到我正在排除故障的快速开/关行为。
更多关于,行为发生在各个应用程序之间。如果我重新启动(并清除问题,请参阅#1),然后导致此问题(请参阅#2)...问题会通过其他发射器/扫描仪应用程序出现。
我诊断出这个问题,因为某种低级蓝牙与"Knock to Unlock" app冲突。
“敲打打开”使用BLE用于计算机的双向通信。我卸载应用程序的那一刻,问题就解决了。我希望这可以为同一案件中的某个人省点小事。
的一点想法:
你确定你的
CBPeripheralManager
实例不会超出范围或被覆盖和垃圾收集,您的ViewController仍在前台和屏幕没有被锁定?尝试使用其他发射器应用,如免费Locate应用验证它不是设备特定的问题。
如果定位应用程序在同一个设备上工作,那么在您的应用程序中必须有其他的东西在晚些时候干扰广播。也许你可以在Github或其他地方分享代码,以便其他人可以测试。
我刚刚尝试从另一个应用程序发射并观察到相同的行为。将此添加到主线程。 – Dan 2014-12-07 16:19:33
我还没有亲眼目睹iPhone iOS 6上的这一行为。其他应用可能会干扰您的传输。您可以尝试暂时卸载您认为可能使用蓝牙的任何其他应用程序。 – davidgyoung 2014-12-07 21:34:45
很高兴你找到它。是的,敲击应用程序可能会有问题,因为它试图连接它所看到的每个蓝牙广告设备。之前我没有注意到它会阻止iOS设备进行广告。 – davidgyoung 2014-12-08 23:24:50