UIlocalNotification теперь отображается без запуска фоновой задачи
У меня есть приложение VoIP.
Я используюUILocalNotification
в моем приложении, чтобы предупредить уведомление о входящем звонке, когда приложение в фоновом режиме.
Когда приложение находится в фоновом режиме, после получения входящего вызова вызывается следующая функция.
-(void)showLocalNotification:(NSNotification *)notification {
NSDictionary *dic = notification.userInfo;
NSString *msg = [dic objectForKey:@"msg"];
NSString *sound = [dic objectForKey:@"sound"];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
UILocalNotification *_localNotification = [[UILocalNotification alloc]init];
//setting the fire dat of the local notification
_localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
//setting the time zone
_localNotification.timeZone = [NSTimeZone defaultTimeZone];
//setting the message to display
_localNotification.alertBody = msg;
//default notification sound
if ([sound length]==0) {
_localNotification.soundName = UILocalNotificationDefaultSoundName;
} else {
_localNotification.alertAction = NSLocalizedString(@"Receive", nil);
_localNotification.soundName = @"myringtone.aif";
}
//displaying the badge number
_localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication]applicationIconBadgeNumber]+1;
//schedule a notification at its specified time with the help of the app delegate
[[UIApplication sharedApplication]scheduleLocalNotification:_localNotification];
}
Эта функция устанавливает уведомление scheduleLocal для отображения предупреждения с двумя кнопкамиCancel
а такжеReceive
который срабатывает через секунду.
Теперь проблема заключается в:
Это локальное уведомление отображается для пользователя, только когда фоновая задача запущена следующим образом
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}
Но через 10 минут фоновое задание прекращается. Тогда локальное уведомление не появляется для пользователя, хотя оно срабатывает (журнал печатается после стрельбы)
Я изменилapplicationDidEnterBackground
функция как следующая, чтобы перезапустить фоновую задачу для длительного выполнения. Но не может.
- (void)applicationDidEnterBackground:(UIApplication *)application
{
expirationHandler = ^{
[app endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
self.bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
}
self.bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
}
Теперь вопросы:
Есть ли способ, который будет запускать локальные уведомления и отображаться пользователю, когда приложение находится в фоновом режиме?
Если фоновое задание является обязательным, как долго можно показывать локальное уведомление о появлении пользователя через 10 минут?
Я используюiPhone 3gs
, iPhone 4
а такжеiPhone 5
.