2014-03-05 105 views
3

即使用戶上線後,我也想盡快完成一些任務。我正在使用Reachability類來檢查互聯網。但是當我在後臺時,這個班級不會通知我。我知道人們早些時候問過這個問題,但沒有得到任何解決方案。如果我使用beginBackgroundTaskWithExpirationHandler。 它只給我3到4分鐘,之後,如果網絡變化我沒有得到任何通知。請給我一些建議。我認爲這是可能的,因爲本地郵件應用程序以這種方式工作,我的應用程序只支持iOS7。背景中的IOS可達性通知

回答

3

這是不可能做到你想要的。您無法將自己的假設建立在Apple提供的應用程序上,因爲Apple可以訪問您不需要的流程/ API。郵件在設備上作爲守護程序進程運行,您的應用永遠不會這樣做。請參閱iOS 7 background capabilities。它基於您的應用在用戶想要運行應用之前獲取處理時間 - 而不是在您選擇的任意時間。

0

使用Capabilities的Background Fetch模式。 Firstable你需要檢查後臺模式複選框:

Project settings -> Capabilities -> BackgroundMode -> Background Fetch 

然後,你需要經常問的時間間隔,你可以越早越好,所以我建議application:didFinishLaunchingWithOptions:,你需要把這個行:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 
    return YES; 
} 

UIApplicationBackgroundFetchIntervalMinimum - 系統支持的最小提取間隔 。

然後當後臺抓取會解僱你可以在AppDelegate檢查與方法:

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ 
    Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
    [reachability startNotifier]; 
    NetworkStatus status = [reachability currentReachabilityStatus]; 

    switch (status) { 
     case NotReachable: { 
      NSLog(@"no internet connection"); 
      break; 
     } 
     case ReachableViaWiFi: { 
      NSLog(@"WiFi"); 
      break; 
     } 
     case ReachableViaWWAN: { 
      NSLog(@"cellular"); 
      break; 
     } 
    } 
    completionHandler(YES); 
} 

支持的iOS 7.0 +