我正在与ibeacons工作几周,我试图发布一些本地通知,当iphone击中beaconregion(靠近时)。
当应用程序在后台锁定并显示时,它工作正常,但当我的显示器变黑时, didRangeBeacons方法停止被调用。
我知道使用
region.notifyEntryStateOnDisplay = true;
我们可以在显示时收到通知。
当应用程序处于后台状态并且已关闭并显示时,是否有任何方法可以实现发布通知。
请帮帮我。
答案 0 :(得分:11)
完全有可能在背景中放置信标。
您可以通过与当前位置管理器一起设置或创建并行管理器来解决限制(我认为这没有区别)。您还需要在项目中启用后台位置更新功能。
locationManager2 = [[CLLocationManager alloc] init];
locationManager2.delegate = self;
locationManager2.desiredAccuracy = kCLLocationAccuracyKilometer;
[locationManager2 startUpdatingLocation];
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
//Do nothing here, but enjoy ranging callbacks in background :-)
}
现在,当Apple问您为什么需要在应用中使用后台位置更新模式时,您需要有一个很好的解释。他们非常挑剔。
答案 1 :(得分:4)
如果您已请求信标输入通知和测距,并且在屏幕锁定时输入新区域,您将获得didEnterRegion消息(或可能是didDetermineState消息),然后是大约5秒的测距消息。如果用户在5秒钟内未唤醒设备,则测距消息将停止。
因此,您无法根据与背景信号的接近程度进行过滤。如果您尝试等到范围值接近,那么您很可能无法得到它,因为设备会在用户关闭之前停止发送测距消息。然后,在用户再次离开该区域或唤醒手机并将您的应用程序带回前台之前,您将不会再收到有关该信标区域的通知。
我正在处理的应用在收到didEnterRegion(或didDetermineState)消息时发布本地通知。这会导致屏幕亮起,但似乎没有延长通知范围的时间。
答案 2 :(得分:2)
不,这是设计上的,反映了iOS节约电池的目标。
didRangeBeacons:。David Young有一个非常详尽的文章,可能有助于澄清。
答案 3 :(得分:1)
我和Madhu有同样的问题。我没有使用 didUpdateToLocation ,而是使用了 didUpdateLocations 。现在,我可以在应用程序处于后台或终止时锁定并显示关闭范围。
在 iOS 8.4
上func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
//Do nothing here
}