我使用ibeacon API开发了一个应用程序,可以在后台使用信标。因为它使用核心位置和蓝牙,所以我从功能中启用了位置和蓝牙配置。因此,在运行我的应用程序后,范围在后台发生,但在我的应用程序终止5-10分钟后,当我启动应用程序时,它再次显示首页和登录页面,所以在google之后,我了解到应用程序在后台运行,但有一些额外的时间。
为了解决应用程序终止问题,我在一个方法中使用了下面的代码,并在applicationDidEnterBackground中调用该方法。
-(void)startBackgroundTask
{
if(bgTask != UIBackgroundTaskInvalid)
{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
NSLog(@"your time is over");
//you can call start once again to get more time
}];
}
-(void) endBackgroundUpdateTask
{
[[UIApplication sharedApplication] endBackgroundTask: bgTask];
bgTask= UIBackgroundTaskInvalid;
[[NSNotificationCenter defaultCenter]
postNotificationName:@"TimerOutStartMonitering" object:nil];}
在使用上面的代码和调试后,我的应用程序ranging一旦UIBackgroundTaskInvalid停止。如何才能同时完成这两个任务1)后台时间一结束,我的App就不应该终止。2)我对信标的定位不应该停止。
有可能吗?请帮帮我。
发布于 2014-06-25 18:43:19
不幸的是,这是不可能的。您不能无限期地运行这样的后台任务。此机制仅适用于销毁前的短期应用清理。参见here。
运行后台任务的
应用程序运行它们的时间是有限的。(您可以使用backgroundTimeRemaining属性找出可用的时间。)
因此,iBeacon测距在后台被限制在几秒内。您可以使用IBeacon监控来重新启动您的应用程序,并在信标发现时再次进行测距,但同样,除非用户将应用程序带到前台,否则您将只能获得很小的测距时间。
https://stackoverflow.com/questions/24404621
复制相似问题