以下是设置:
我正在构建一个使用60分钟计时器的iOS应用程序。一旦启动,我希望它通知用户,无论手机的状态如何(睡觉或查看我的应用程序)在60分钟的时间内做某事。
要做到这一点,我的本地通知设置将在相应的ViewController.m文件中的timers方法中执行:
// what happens when the timer ends
if (secondsCount == 0) {
[countdownTimer invalidate];// stops the countdown
countdownTimer = nil;
hourCountDown.text = [NSString stringWithFormat:@"60:00"];// sets the timer to 60 mins
// shows and hides correct UI elements
nowBtn.hidden = YES;
countDown.hidden = YES;
countDown.hidden = YES;
startBtn.hidden = NO;
// shows notification that it's time to do the task
UILocalNotification *itsTime = [[UILocalNotification alloc] init];
itsTime.fireDate = [NSDate dateWithTimeIntervalSinceNow:secondsCount];
itsTime.alertBody = @"Time to do it";
itsTime.timeZone = [NSTimeZone defaultTimeZone];
[[UIApplication sharedApplication] scheduleLocalNotification:itsTime];
itsTime.soundName = UILocalNotificationDefaultSoundName;
// sets the page label
labelState.text = [NSString stringWithFormat:@"Do it!"];
}
在AppDelegate.m文件中,我有以下代码:
- (void)applicationDidEnterBackground:(UIApplication *)application
{ //允许计时器在应用程序未启动时在后台运行
UIBackgroundTaskIdentifier bgTask =0;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}
我注意到它似乎只是在我的手机插入我的MBP并通过Xcode的模拟器运行应用程序时显示通知。我按下我的应用程序上的右键,等待一个小时,然后显示通知。如果我拔下手机,请运行我的应用程序并按下相同的按钮,等待一小时......不会显示任何通知。
我的问题是为什么?这是因为我正在使用通过Xcode模拟器添加到我的设备的应用程序,而不是我像真正的应用程序一样安装的存档文件?如果是这样,我能做些什么呢?
谢谢!
答案 0 :(得分:3)
在模拟器中运行时,后台任务可以无限次使用。连接手机后,您可以在手机上运行。在手机上,操作系统可以让您短时间内运行,当时间结束时,您的应用程序会进入睡眠状态。在iOS 7上,您在后台获得30秒。在iOS 6及更低版本中,10分钟。也不会给你你想要的东西。计算并注册将来的本地通知,或使用推送通知。