Existe alguma maneira de verificar se o aplicativo iOS está em segundo plano?


Respostas:


285

O delegado do aplicativo recebe retornos de chamada indicando transições de estado. Você pode rastreá-lo com base nisso.

Além disso, a propriedade applicationState em UIApplication retorna o estado atual.

[[UIApplication sharedApplication] applicationState]

64
Obrigado - e, para maior clareza, é [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
precisa saber é

39
Eu acho que [[UIApplication sharedApplication] applicationState] != UIApplicationStateActiveé melhor, como UIApplicationStateInactive é quase equivalente a estar em plano ...
JP Illanes


2
Descobri que os retornos de chamada de transição não são chamados se seu aplicativo é criado para fins de busca em segundo plano.
Mike Asdf

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

Isso pode ajudá-lo a resolver seu problema.

Veja o comentário abaixo - inativo é um caso bastante especial e pode significar que o aplicativo está em processo de lançamento em primeiro plano. Isso pode ou não significar "pano de fundo" para você, dependendo do seu objetivo ...


Resposta agradável e útil. Trabalhou
Saranjith 2/11

1
Dos documentos: UIApplicationStateInactive - o aplicativo está sendo executado em primeiro plano, mas não está recebendo eventos. Isso pode acontecer como resultado de uma interrupção ou porque o aplicativo está em transição para ou de segundo plano.
Andy Weinstein

30

Swift 3

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

o inverso também é verdadeiro? posso verificar == .inactive || == .active para ver se está em primeiro plano (em vez de abrir no thread de segundo plano)?
roberto tomás

21

Versão rápida:

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

8

Se você preferir receber retornos de chamada em vez de "perguntar" sobre o estado do aplicativo, use estes dois métodos em AppDelegate:

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


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

1
É importante observar que applicationWillEnterForeground é chamado antes de applicationDidBecomeActive. Portanto, verificar applicationState de dentro de applicationWillEnterForeground retornará UIApplicationStateBackground. Isso me assustou um pouco. Portanto, usei uma combinação das soluções acima verificando applicationState de applicationDidBecomeActive em vez de (incorretamente) verificando applicationState para UIApplicationStateBackground de applicationWillEnterForeground.
11136 Justin Domnitz #

1
Eu tinha essa mesma solução e é adequada para casos em que você precisa das informações de estado em outro thread / fila.
naz

4

veloz 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
Embora esse código possa responder à pergunta, fornecer um contexto adicional a respeito de por que e / ou como esse código responde à pergunta melhora seu valor a longo prazo.
precisa saber é o seguinte

por causa de nenhuma gravação corpo para SWIFT 4 ajudando para os velozes 4 pessoas
Shakeel Ahmed

o código irá verificar se o aplicativo está em segundo plano! Suponha que se você está recebendo a notificação no fundo e você quer fazer algumas coisas como executar alguma ação se a notificação receber quando o aplicativo em segundo plano o código interno irá executar
Shakeel Ahmed

3

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
        }

1

Uma extensão do Swift 4.0 para facilitar o acesso:

import UIKit

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

Para acessar de dentro do seu aplicativo:

let myAppIsInBackground = UIApplication.shared.isBackground

Se você estiver procurando informações sobre os vários estados ( active, inactivee background), poderá encontrar a documentação da Apple aqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.