如何在IOS中使用后台模式BLE Central添加背景无限定时器?

时间:2015-04-16 08:21:05

标签: ios background nstimer

我想保持我的应用程序可以在特定时间启动计时器,即使在后台,现在我的应用程序使用BLE中央后台模式,我需要在特定时间向蓝色外设发送一些数据,如何实现? 现在计时器选择器似乎只能在返回前台时触发。 我使用Xcode 6.3,在iOS 8.1.3和iOS 8.3上都进行过测试。

3 个答案:

答案 0 :(得分:0)

要允许您在background模式下使用计时器,您需要启用Uses Bluetooth LE accessories标记ON(路径:转到目标 - >功能 - >背景模式) 。如下所示。

enter image description here

在项目中添加以下代码以在background中运行计时器:

步骤1:将__block UIBackgroundTaskIdentifier bgTask声明为全局变量。

步骤2:在applicationDidEnterBackground中添加以下代码。

- (void)applicationDidEnterBackground:(UIApplication *)application {


     bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
     bgTask = UIBackgroundTaskInvalid;
      }];

}

步骤3:一旦应用程序进入前台模式,就停止后台任务处理程序。

 - (void)applicationWillEnterForeground:(UIApplication *)application {
  // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.

  [[UIApplication sharedApplication] endBackgroundTask:bgTask];


}

答案 1 :(得分:0)

但是当app再次成为前景时,似乎只能触发计时器选择器。 我应该使用dispatch_after而不是nstimer吗?但是一旦调度,dispatch_after就无法取消。

答案 2 :(得分:0)

我的现有应用程序有问题。 即使您启用了BLE的后台模式,iOS也不允许在后台运行计时器。它仅支持“ Airplay,Airdrop,画中画”背景模式。 BLE后台模式仅用于使其继续连接。但是在iOS v12.0中,如果您的应用在后台运行2到3个小时左右,则不会触发BLE断开事件。但是在旧版本上可以正常工作。