0

我开发了一个应用程序,它使用 ibeacon API 在后台为信标设置范围。由于它使用核心位置和蓝牙,所以我从功能中启用了位置、蓝牙配置。因此,在运行我的应用程序之后,范围发生在后台,但是在我的应用程序终止之间的 5-10 分钟后,当我启动应用程序时,它再次显示启动画面和登录页面,所以在谷歌之后我了解到应用程序在后台运行一些额外的时间。

为了克服应用程序终止,我在方法中使用以下代码并在 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];

}

使用上面的代码和调试后,一旦 UIBackgroundTaskInvalid 我的应用程序范围停止。我怎样才能完成这两项任务 1)我的应用程序不应该在后台时间结束后终止。2)我的信标测距不应该停止。

可能吗?请帮帮我。

4

1 回答 1

1

不幸的是,这是不可能的。您不能无限期地运行这样的后台任务。此机制仅适用于终止前的短期应用清理。见这里

运行后台任务的应用程序的运行时间是有限的。(您可以使用 backgroundTimeRemaining 属性找出可用的时间。)

正因为如此,iBeacon 测距被限制在后台几秒钟内。您可以使用 IBeacon 监控重新启动您的应用程序并在信标发现时再次进行测距,但同样,除非用户将应用程序带到前台,否则您只会获得一小段测距时间。

于 2014-06-25T10:43:18.710 回答