İOS uygulamasının arka planda olup olmadığını kontrol etmenin herhangi bir yolu var mı?


Yanıtlar:


285

Uygulama temsilcisi, durum geçişlerini gösteren geri aramalar alır. Buna göre izleyebilirsiniz.

Ayrıca UIApplication içindeki applicationState özelliği geçerli durumu döndürür.

[[UIApplication sharedApplication] applicationState]

64
Teşekkür ederim - ve daha fazla netlik için [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
podperson

39
Bence [[UIApplication sharedApplication] applicationState] != UIApplicationStateActivedaha iyi, çünkü
UIApplicationStateInactive


2
Uygulamanız arka plan getirme amaçları için hayata geçirilirse geçiş geri çağrılarının çağrılmadığını fark ettim.
Mike Asdf

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

Bu, sorununuzu çözmenize yardımcı olabilir.

Aşağıdaki yoruma bakın - etkin olmayan, oldukça özel bir durumdur ve uygulamanın ön plana çıkma sürecinde olduğu anlamına gelebilir. Hedefinize bağlı olarak bu sizin için "arka plan" anlamına gelebilir veya gelmeyebilir ...


Güzel, Yardımcı cevap. Çalıştı
Saranjith

1
Dokümanlar'dan: UIApplicationStateInactive - Uygulama ön planda çalışıyor, ancak etkinlik almıyor. Bu, bir kesintinin veya uygulamanın arka plana veya arka plandan geçiş yapmasının bir sonucu olabilir.
Andy Weinstein

30

Hızlı 3

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

bunun tersi de geçerli mi? == .inactive || ==. ön planda olup olmadığını görmek için aktif (arka plan iş parçacığında açmanın aksine)?
roberto tomás

21

Hızlı sürüm:

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

8

Uygulama durumu hakkında "sor" yerine geri arama almayı tercih ediyorsanız, şu iki yöntemi kullanın AppDelegate:

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


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

1
ApplicationWillEnterForeground öğesinin applicationDidBecomeActive öğesinden önce çağrıldığına dikkat etmek önemlidir. Bu nedenle, applicationWillEnterForeground içinden applicationState öğesinin işaretlenmesi UIApplicationStateBackground öğesini döndürür. Bu beni biraz attı. Bu nedenle, yukarıdaki çözümlerin bir kombinasyonunu, applicationWillEnterForeground içinden (hatalı olarak) applicationState'i UIApplicationStateBackground için kontrol etmek yerine applicationDidBecomeActive içinden kontrol ederek kullandım.
Justin Domnitz

Ben aynı çözümü vardı ve başka bir iş parçacığı / kuyruk durumu bilgisine ihtiyaç duyduğunuz durumlarda uygundur.
naz

4

hızlı 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
Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı konusunda ek bağlam sağlamak uzun vadeli değerini arttırır.
rollstuhlfahrer

hızlı 4 insanlar için hızlı 4 yardım için hiçbir vücut yazma nedeniyle
Shakeel Ahmed

kod arka planda uygulama olup olmadığını devlet kontrol edecek! Arka planda bildirim alıyorsanız varsayalım ve bildirim alırsanız bazı eylemi gerçekleştirmek gibi bazı şeyler yapmak istediğinizde iç kod çalıştırır arka planda uygulama
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

Erişimi biraz kolaylaştırmak için bir Swift 4.0 uzantısı:

import UIKit

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

Uygulamanızdan erişmek için:

let myAppIsInBackground = UIApplication.shared.isBackground

Çeşitli durumlar ( activeve inactiveve background) hakkında bilgi arıyorsanız , Apple belgelerini burada bulabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.