Есть ли способ проверить, находится ли приложение iOS в фоновом режиме?

Я хочу проверить, работает ли приложение в фоновом режиме.

В:

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

9 ответов

Делегат приложения получает обратные вызовы, указывающие переходы состояний. Вы можете отслеживать это на основе этого.

Также свойство applicationState в UIApplication возвращает текущее состояние.

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

Это может помочь вам в решении вашей проблемы.

См. Комментарий ниже - неактивное является довольно частным случаем и может означать, что приложение находится в процессе запуска на передний план. Это может или не может означать "фон" для вас в зависимости от вашей цели...

Свифт 3

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

Swift версия:

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

Свифт 4

let state = UIApplication.shared.applicationState
    if state == .background {
        print("App in Background")
        //MARK: - if you want to perform come action when app in background this will execute 
        //Handel you code here
    }
    else if state == .foreground{
        //MARK: - if you want to perform come action when app in foreground this will execute 
        //Handel you code here
    }

Если вы предпочитаете получать обратные вызовы вместо "спрашивать" о состоянии приложения, используйте эти два метода в своем AppDelegate:

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


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

Swift 4+

let appstate = UIApplication.shared.applicationState
        switch appstate {
        case .active:
            print("the app is in active state")
        case .background:
            print("the app is in background state")
        case .inactive:
            print("the app is in inactive state")
        default:
            print("the default state")
            break
        }

Расширение Swift 4.0 для облегчения доступа к нему:

import UIKit

extension UIApplication {
    var isBackground: Bool {
        return UIApplication.shared.applicationState == .background
    }
}

Чтобы получить доступ из вашего приложения:

let myAppIsInBackground = UIApplication.isBackground

Если вы ищете информацию о различных штатах (active, inactive а также background), вы можете найти документацию Apple здесь.

Благодаря Шакилу Ахмеду это сработало для меня в Swift 5.

      switch UIApplication.shared.applicationState {
case .active:
    print("App is active")
case .inactive:
    print("App is inactive")
case .background:
    print("App is in background")
default:
    return
}

Надеюсь, кому-нибудь поможет =)