繁体   English   中英

如何在iOS中使用后台模式BLE Central添加后台无限计时器?

[英]How to add background infinite timer with background mode BLE Central in IOS?

我想让我的应用程序即使在后台也可以在特定时间触发计时器,现在我的应用程序使用BLE Central后台模式,并且我需要在特定时间向蓝色外围设备发送一些数据,如何实现呢? 现在,计时器选择器似乎只能在输入回到前台时才能被触发。 我使用在iOS 8.1.3和iOS 8.3上均经过测试的Xcode 6.3。

要使您的计时器在background模式下工作,您需要启用“ Uses Bluetooth LE accessories标记为ON (路径:转到目标->功能->后台模式)。 如下所示。

在此处输入图片说明

并在您的项目中添加以下代码以在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];


}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM