我有一个VoIP应用程序。效果很好。呼叫在前台和后台工作。
完成了以下步骤:
现在的问题是,当应用程序处于后台,然后调用时,UILocalNotification会触发以下内容。用户可以看到一个带有两个按钮的通知,“取消”和“接收”。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask: bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_main_queue(), ^{
while ([application backgroundTimeRemaining] > 1.0) {
NSString *friend = [self checkForIncomingChat];
if ([friend length]>0) {
[[UIApplication sharedApplication] cancelAllLocalNotifications];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif) {
localNotif.alertBody = [NSString stringWithFormat: NSLocalizedString(@"%@", nil), friend];
localNotif.alertAction = NSLocalizedString(@"Receive", nil);
localNotif.soundName = @"alarmsound.caf";
localNotif.applicationIconBadgeNumber = 1;
[application presentLocalNotificationNow:localNotif];
friend = nil;
}
}
sleep(1);
}
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
});
}
- (NSString *) checkForIncomingChat {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *incall = [prefs objectForKey:@"incall"];
if ([incall length]>0) {
[prefs setObject:@"" forKey:@"incall"];
return incall;
}
return @"";
};现在的问题是:
通过按home按钮进入后台后,应用程序会在10分钟内触发UILocalNotification。
10分钟后,如果有任何呼叫出现,它将在后台运行。UILocalNotification不触发,所以用户什么都不知道。
发生这种情况是因为后台任务在10分钟后停止。
如何管理它或扩展后台任务以便长期运行或重新启动后台任务。
我在搜索后找到了越来越多的答案,但是对于长期运行的背景任务来说,没有什么是有效的。
请大家帮帮我。我已经试了两周了。
发布于 2015-01-08 02:33:33
听起来您有一个正在接收调用的VoIP套接字,所以您可以只在从套接字上读取数据时显示本地通知,而不是循环和轮询调用状态。
如果VoIP控件套接字是TCP,并使用适当的...NetworkServiceTypeVoIP键标记,您的应用程序将自动从挂起唤醒10秒,此时您可以显示本地通知。
有关详细信息,请参阅为VoIP使用配置套接字。
一旦完成,您上面共享的所有代码都可以删除。
https://stackoverflow.com/questions/19273039
复制相似问题