我正在处理警报应用程序。我在过去两周遇到了一个问题。我的问题是:我的应用程序在后台运行。第一次安装应用程序并设置警报&关闭应用程序。如果闹钟时间超过当前时间3分钟,那么3分钟后不振铃意味着在后台进程中没有响铃。如果应用程序已启用,则警报正在运行。
这是我的代码:
self->bgTask = 0;
NSAssert(self->bgTask == UIBackgroundTaskInvalid, nil);
bgTask = [application beginBackgroundTaskWithExpirationHandler: ^
{
NSLog(@"beginBackgroundTaskWithExpirat");
dispatch_async(dispatch_get_main_queue(), ^
{
NSLog(@"dispatch_async");
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
});
}];
dispatch_async(dispatch_get_main_queue(), ^
{
NSLog(@"dispatch_get_main_queue");
//Start BG Timer
[self Start_Update_Timer];
self->bgTask = UIBackgroundTaskInvalid;
});
// This is my timer for background running ..
-(void) Start_Update_Timer
{
//If timer is already running, stop the timer
if(self.callTimer)
{
[self.callTimer invalidate];
self.callTimer=nil;
}
//call the timer for every one sec
self.callTimer =[NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(update_Alarm_List) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.callTimer forMode:NSRunLoopCommonModes];
}
答案 0 :(得分:2)
因为应用程序不应该像这样工作。如果您希望您的应用程序在后台持续播放声音,则应将其注册为专门执行此操作的应用程序。喜欢音乐播放器。如果您的应用只发送警报,那么您必须使用本地通知来触发"触发"你的应用程序的声音。通知可以播放30秒的声音,并以特定间隔重播。您的应用程序将在3分钟后播放,因为您的背景"执行时间已过期。这是苹果允许您的应用在后台运行的时间,以便在用户关闭您的应用程序后执行您必须执行的操作。
这适用于您希望在后台播放声音的情况。请注意,如果播放停止,您的应用将停止。
https://developer.apple.com/library/ios/qa/qa1668/_index.html#//apple_ref/doc/uid/DTS40010209
如果您想使用声音通知(最多30秒),请参阅此处: