我想保持我的应用程序可以在特定时间启动计时器,即使在后台,现在我的应用程序使用BLE中央后台模式,我需要在特定时间向蓝色外设发送一些数据,如何实现? 现在计时器选择器似乎只能在返回前台时触发。 我使用Xcode 6.3,在iOS 8.1.3和iOS 8.3上都进行过测试。
答案 0 :(得分:0)
要允许您在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];
}
答案 1 :(得分:0)
但是当app再次成为前景时,似乎只能触发计时器选择器。 我应该使用dispatch_after而不是nstimer吗?但是一旦调度,dispatch_after就无法取消。
答案 2 :(得分:0)
我的现有应用程序有问题。 即使您启用了BLE的后台模式,iOS也不允许在后台运行计时器。它仅支持“ Airplay,Airdrop,画中画”背景模式。 BLE后台模式仅用于使其继续连接。但是在iOS v12.0中,如果您的应用在后台运行2到3个小时左右,则不会触发BLE断开事件。但是在旧版本上可以正常工作。