Чи є спосіб перевірити, чи додаток iOS знаходиться у фоновому режимі?


Відповіді:


285

Делегат програми отримує зворотні дзвінки із зазначенням переходів стану. Ви можете відстежувати це на основі цього.

Також властивість applicationState в UIApplication повертає поточний стан.

[[UIApplication sharedApplication] applicationState]

64
Дякую - і для додаткової ясності це [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
підперсон

39
Я думаю [[UIApplication sharedApplication] applicationState] != UIApplicationStateActive, що краще, оскільки UIApplicationStateInactive майже еквівалентний фоновому режиму ...
JP Illanes


2
Я виявив, що зворотні перехідні виклики не дзвонять, якщо ваш додаток оживає для фонових цілей.
Mike Asdf

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

Це може допомогти вам у вирішенні вашої проблеми.

Дивіться коментар нижче - неактивний - це досить особливий випадок, і це може означати, що додаток зараз запускається на перший план. Це може чи не може означати "передумови" для вас залежно від вашої мети ...


Приємна, корисна відповідь. Працював
Саранджіт

1
Документи: UIApplicationStateInactive - додаток працює на передньому плані, але не отримує подій. Це може статися внаслідок перерви або через те, що додаток переходить на другий план або з нього.
Енді Вайнштейн

30

Швидкий 3

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

чи справжній реверс? чи можу я перевірити == .активний || ==. Active, щоб побачити, чи знаходиться він на передньому плані (на відміну від відкриття на фоновому потоці)?
roberto tomás

21

Швидка версія:

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

8

Якщо ви віддаєте перевагу отримувати зворотні дзвінки замість "запитувати" про стан програми, використовуйте ці два способи у вашому AppDelegate:

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


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

1
Важливо зазначити, що applicationWillEnterForeground викликається перед applicationDidBecomeActive. Тому перевірка applicationState зсередини applicationWillEnterForeground поверне UIApplicationStateBackground. Це трохи відкинуло мене. Отже, я використав комбінацію вищезазначених рішень, перевіривши applicationState зсередини applicationDidBecomeActive замість (неправильно) перевірки applicationState на UIApplicationStateBackground зсередини applicationWillEnterForeground.
Джастін Домніц

У мене було таке саме рішення, і воно підходить для випадків, коли вам потрібна інформація про стан в іншій потоці / черзі.
наз

4

стрімкий 5

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
    }

1
Хоча цей код може відповісти на питання, надаючи додатковий контекст стосовно того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
rollstuhlfahrer

через те, що тіло не пише для швидкої 4 допомоги для швидких 4 народів
Shakeel Ахмед

код перевірить, якщо ви додаток у фоновому режимі! Припустимо, якщо ви отримуєте сповіщення у фоновому режимі, і хочете зробити якісь дії, як-от виконати якусь дію, якщо повідомлення отримає, коли програма у фоновому режимі виконає внутрішній код
Shakeel Ahmed

3

Швидкий 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
        }

1

Розширення Swift 4.0 для полегшення доступу до нього:

import UIKit

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

Щоб отримати доступ зсередини програми:

let myAppIsInBackground = UIApplication.shared.isBackground

Якщо ви шукаєте інформацію про різні стани ( active, inactiveі background), можна знайти в документації компанії Apple тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.