我试图将AirBocate示例代码中的iBeacon广告代码抓到一个空应用中。它看起来像:
NSDictionary *peripheralData = nil;
region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:beaconUuid] major:beaconMajor minor:beaconMinor identifier:beaconIdentifier];
peripheralData = [region peripheralDataWithMeasuredPower:nil];//[NSNumber numberWithInt:power]
// The region's peripheral data contains the CoreBluetooth-specific data we need to advertise.
if(peripheralData)
{
[peripheralManager startAdvertising:peripheralData];
return YES;
}
空应用程序能够发出iBeacon信号,该信号可以被另一台设备上的另一个应用程序成功监控。但问题出现在另一个app上,locationManager:didEnterRegion:delegate方法后跟locationManager:didExitRegion:非常快。
外围设备:iPad mini 2视网膜 中央设备:iPhone 5S
运行AirLocate应用程序以将一个设备单独配置为iBeacon发射器而另一个设备作为监视器也可以重现上述问题。
其他一些调查结果:
我的猜测是iBeacon广告的频率如此之小(比如说,几秒钟一次),接收者可能会认为该区域在再次收到包裹之前已退出。它也可能是iOS中的一个错误。
有人知道吗?
答案 0 :(得分:0)
请注意,您无法在后台将iOS传输为iBeacon。如果锁定屏幕出现,您很快就会在另一台设备上收到退出通知。
默认情况下,iOS设备以30 Hz的频率发送广告,但同样,应用必须位于前台。我用硬件BLE嗅探器测量了这一点。所以我怀疑传输频率是一个问题。
答案 1 :(得分:0)
我想用有趣的东西更新我自己的问题。
在本周发布的针对iBeacon稳定性修复的iOS 7.1.2升级后,情况有所改善:接收端将在我自己的应用测试中输入事件后一分钟报告退出事件(之前它在进入事件后很快发生)。如果我在两端使用Locate Beacon,我观察到同样的不稳定性。
我做的另一个测试是使用第三个iOS 7.1(未升级到7.1.2)手机作为接收器,它根本不会从外设掉线。按预期稳定。所以问题可能与接收器设备(又称中央)有关。
所以我的第一个iPhone接收器上的蓝牙模块似乎有问题。我希望它不是由它上面那么多的蓝牙调试引起的:)
如果我使用原装的iPad mini 2作为外围设备并将此iPhone 5s作为中央设备,则始终可以观察到此问题。但是,如果我使用第三部iPhone(iPhone 5,如果类型重要)作为外围设备,并且仍然以可疑的iPhone 5s为中心,那么它非常稳定。
因此,如果您遇到同样的奇怪问题,建议如下: