Я работаю над вызовом VOIP и добавляю поддержку iOS < 10. Для входящего вызова VOIP, когда приложение находится в фоновом режиме, я использую UILocalNotification (устарел в iOS 10).iOS 9: beginBackgroundTaskWithExpirationHandler получает вызов до таймаута
Чтобы сделать вызов 60 секунд (или 1 минуту) Я использую этот код
count = 0;
apnTimer = [NSTimer scheduledTimerWithTimeInterval:3.0
target:self
selector:@selector(showIncomingCall:)
userInfo:userInfo
repeats:YES];
self.backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"ALVOIP : BACKGROUND_HANDLER_NO_MORE_TASK_RUNNING.");
[application endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
-(void)showIncomingCall:(NSTimer *)timer
{
if (count < 60)
{
UIApplication *application = [UIApplication sharedApplication];
[application presentLocalNotificationNow:localNotification];
NSLog(@"Time Remaining: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]);
count = count + 3;
return;
}
// TIMEOUT : STOP TIMER AND LOCAL NOTIFICATION BACKGROUND TASK
[self invalidateCallNotifying];
}
-(void)invalidateCallNotifying
{
[apnTimer invalidate];
if (self.backgroundTask != UIBackgroundTaskInvalid)
{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}
}
продлить время фонового процесса до 1 минуты и он работает в IOS 10.1.1 (iPhone), но не работает в iOS 9.3.5 (iPad). Как-то обработчик вызывает 30-33 секунды?
UPDATE:
я попытался прокомментировать этот код:
self.backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"ALVOIP : BACKGROUND_HANDLER_NO_MORE_TASK_RUNNING.");
[application endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
Тем не менее я могу сделать 30-33 секунд я то есть не знаю, почему это не работает?
Мне нужно продлить время, когда приложение является фоном, чтобы не изменять какую-либо вещь в поле зрения контроллера. –
@Abhishek Thapliyal использует ур логику внутри этого метода – ChenSmile
Не понимаю, как это будет меняться в моем коде. Мне не нужны изменения контроллера vie или любой вызов, вызывающий только таймер –