2011-04-29 41 views
150

我要檢查,如果應用程序在後臺運行。檢查iOS應用程序是在後臺

在:

locationManagerDidUpdateLocation { 
    if(app is runing in background){ 
     do this 
    } 
} 
+0

你說的是'locationManager:didUpdateToLocation:fromLocation:'方法嗎? – 2011-04-29 18:31:33

回答

257

應用程序委託獲取指示狀態轉換的回調。你可以根據它來追蹤它。

而且在UIApplication的的applicationState屬性返回當前狀態。

[[UIApplication sharedApplication] applicationState] 
+60

謝謝你 - 和更高的透明度是[[UIApplication的sharedApplication] applicationState] == UIApplicationStateBackground。 – podperson 2012-06-05 16:01:23

+37

我覺得'[[UIApplication sharedApplication] applicationState]!= UIApplicationStateActive'更好,因爲UIApplicationStateInactive幾乎等同於後臺... – Raspu 2013-10-28 02:53:03

+6

這裏列出的狀態如下: https://developer.apple.com/library /ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIApplicationState – 2014-04-07 18:00:44

163
UIApplicationState state = [[UIApplication sharedApplication] applicationState]; 
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive) 
{ 
    //Do checking here. 
} 

這可能會幫助您解決問題。

見下面的評論 - 不活動是一個相當特殊的情況,並可能意味着應用程序是在被髮射到前臺的過程。這取決於你的目標,可能會或可能並不意味着「背景」你...

+0

不錯,有幫助的答案。已工作 – Saranjith 2017-11-02 03:56:39

+0

來自文檔:UIApplicationStateInactive - 應用程序正在前臺運行,但未接收事件。這可能是由於中斷或應用程序正在轉換到背景或從背景轉換而導致的。 – 2018-01-07 12:00:13

8

如果您願意接受的,而不是「要求」有關應用程序的狀態,在你AppDelegate使用這兩種方法回調:

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    NSLog(@"app is actvie now"); 
} 


- (void)applicationWillResignActive:(UIApplication *)application { 
    NSLog(@"app is not actvie now"); 
} 
+0

重要的是要注意applicationWidEncomeForeground在applicationDidBecomeActive之前被調用。因此,從applicationWillEnterForeground中檢查applicationState將返回UIApplicationStateBackground。這讓我有點失望。所以,我通過內applicationDidBecomeActive從檢查applicationState代替(錯誤地)從內applicationWillEnterForeground檢查applicationState爲UIApplicationStateBackground使用上述解決方案的組合。 – 2015-11-13 14:02:45

+0

我有這個相同的解決方案,它適用於你需要另一個線程/隊列的狀態信息的情況。 – naz 2017-10-06 09:41:45

15

斯威夫特版本:

let state = UIApplication.sharedApplication().applicationState 
      if state == .Background { 
       print("App in Background") 
      } 
14

斯威夫特3

let state = UIApplication.shared.applicationState 
    if state == .background { 
     print("App in Background") 
    } 
相關問題