iOS 앱이 백그라운드인지 확인하는 방법이 있습니까?


답변:


285

앱 델리게이트는 상태 전환을 나타내는 콜백을받습니다. 이를 기반으로 추적 할 수 있습니다.

또한 UIApplication 의 applicationState 속성은 현재 상태를 반환합니다.

[[UIApplication sharedApplication] applicationState]

64
감사합니다. 그리고 명확성을 위해 [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground입니다.
podperson

39
나는 생각 [[UIApplication sharedApplication] applicationState] != UIApplicationStateActiveUIApplicationStateInactive가 ... 배경으로 거의 동등로, 더 나은
JP Illanes


2
백그라운드 가져 오기 목적으로 앱이 활성화되면 전환 콜백이 호출되지 않는 것으로 나타났습니다.
Mike Asdf

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

문제를 해결하는 데 도움이 될 수 있습니다.

아래의 주석을 참조하십시오-비활성은 매우 특별한 경우이며 앱이 포 그라운드로 시작되고 있음을 의미 할 수 있습니다. 그것은 당신의 목표에 따라 "배경"을 의미하거나 의미하지 않을 수 있습니다 ...


좋은 답변입니다. 일
Saranjith

1
문서에서 : UIApplicationStateInactive-앱이 포 그라운드에서 실행 중이지만 이벤트를 수신하지 않습니다. 중단으로 인해 또는 앱이 백그라운드로 또는 백그라운드에서 전환되어 발생할 수 있습니다.
Andy Weinstein

30

스위프트 3

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

반대도 마찬가지입니까? == .inactive를 확인할 수 있습니까 || == .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보다 먼저 호출됩니다. 따라서 applicationWillEnterForeground 내에서 applicationState를 확인하면 UIApplicationStateBackground가 리턴됩니다. 이것은 나를 조금 던져 버렸다. 따라서 applicationWillEnterForeground 내에서 UIApplicationStateBackground의 applicationState를 (잘못된) 확인하는 대신 applicationDidBecomeActive 내에서 applicationState를 확인하여 위 솔루션의 조합을 사용했습니다.
저스틴 돔 니츠

나는이 동일한 솔루션을 가지고 있으며 다른 스레드 / 대기열에 대한 상태 정보가 필요한 경우에 적합합니다.
naz

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 Ahmed

코드는 응용 프로그램이 백그라운드인지 여부를 확인합니다! 백그라운드에서 알림을 받고 있고 백그라운드에서 앱이 실행될 때 알림이 수신되면 일부 작업을 수행하는 등의 작업을 수행하려는 경우
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, inactivebackground), 당신은 찾을 수 있습니다 여기에 애플 문서를 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.