2013-10-09 61 views
1

我有一個VoIP應用程序。哪個工作正常。呼叫在前臺和後臺工作。UILocalNotification在後臺10分鐘後不會觸發

以下步驟進行:

  1. UIBackgroundModes =>在Info.plist中

  2. VOIP配置的應用程序的接口,用於網絡電話使用的一個。

  3. 之前移動到背景,setKeepAliveTimeout:處理器:被稱爲

  4. 配置音頻會話處理過渡到和積極利用。

  5. 爲確保iPhone上更好的用戶體驗,使用核心電話框架來調整與基於蜂窩電話呼叫相關的行爲;

  6. 爲了確保VoIP應用程序的良好性能,使用系統配置框架來檢測網絡更改並允許應用程序儘可能多地休眠。

現在的事情是,當應用程序在後臺,並有電話打進來,然後UILocalNotification火災理由如下:並且用戶可以看到兩個按鈕通知取消和RECEIVE

- (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鍵應用火災UILocalNotification去後臺如有電話進來後10分鐘內。

10分鐘後,如果有任何來電,它會在後臺運行。 UILocalNotification不會觸發,所以用戶不知道任何事情。

發生這種情況是因爲後臺任務在10分鐘後停止。

如何管理它或延長後臺任務以便長時間運行或重新啓動後臺任務。

越來越多的答案我搜索後發現,但沒有長期運行的後臺任務的作品。

請有人幫助我。我從2周開始嘗試。

+1

我有一個類似的問題...我發現我的應用程序禁用「背景..」在設置/後臺應用程序刷新..(iOS7) – TonyMkenu

+0

你如何解決它在以前的版本?我正在使用* iPhone-3gs *,* iPhone-4 *,* iPhone-5 * – Salim

回答

0

聽起來好像您有一個VoIP套接字,您正在接收呼叫,因此您可以在從套接字讀取數據的位置呈現本地通知,而不是循環和輪詢呼叫狀態。

如果VoIP控制套接字是TCP,並用適當的...NetworkServiceTypeVoIP鍵標記,您的應用會自動從暫停狀態醒來10秒,此時您可以呈現本地通知。

有關更多信息,請參見Configuring Sockets for VoIP Usage

一旦完成,您可以刪除上面共享的所有代碼。