Apakah ada cara untuk memeriksa apakah aplikasi iOS ada di latar belakang?


Jawaban:


285

Delegasi aplikasi mendapat panggilan balik yang mengindikasikan transisi keadaan. Anda dapat melacaknya berdasarkan itu.

Juga properti applicationState di aplikasi UIA mengembalikan keadaan saat ini.

[[UIApplication sharedApplication] applicationState]

64
Terima kasih - dan untuk kejelasan tambahan ini [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
podperson

39
Saya pikir [[UIApplication sharedApplication] applicationState] != UIApplicationStateActivelebih baik, karena UIApplicationStateInactive hampir setara dengan di latar belakang ...
JP Illanes


2
Saya telah menemukan bahwa panggilan balik transisi tidak dipanggil jika aplikasi Anda dihidupkan untuk tujuan pengambilan latar belakang.
Mike Asdf

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

Ini dapat membantu Anda dalam memecahkan masalah Anda.

Lihat komentar di bawah - tidak aktif adalah kasus yang cukup khusus, dan dapat berarti bahwa aplikasi sedang dalam proses diluncurkan ke latar depan. Itu mungkin atau mungkin tidak berarti "latar belakang" bagi Anda tergantung pada tujuan Anda ...


Bagus, jawaban yang bermanfaat. Bekerja
Saranjith

1
Dari dokumen: UIApplicationStateInactive - Aplikasi ini berjalan di latar depan tetapi tidak menerima acara. Ini mungkin terjadi sebagai akibat dari gangguan atau karena aplikasi beralih ke atau dari latar belakang.
Andy Weinstein

30

Cepat 3

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

apakah yang sebaliknya juga benar? dapatkah saya memeriksa == .inactive || == .aktif untuk melihat apakah ada di latar depan (sebagai lawan membuka di utas latar belakang)?
roberto tomás

21

Versi cepat:

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

8

Jika Anda lebih suka menerima panggilan balik alih-alih "bertanya" tentang status aplikasi, gunakan dua metode ini di AppDelegate:

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


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

1
Penting untuk dicatat bahwa applicationWillEnterForeground dipanggil sebelum applicationDidBecomeActive. Oleh karena itu, memeriksa applicationState dari dalam applicationWillEnterForeground akan mengembalikan UIApplicationStateBackground. Ini melempar saya sedikit. Jadi, saya menggunakan kombinasi solusi di atas dengan memeriksa applicationState dari dalam applicationDidBecomeActive alih-alih (salah) memeriksa applicationState untuk UIApplicationStateBackground dari dalam applicationWillEnterForeground.
Justin Domnitz

1
Saya punya solusi yang sama dan cocok untuk kasus-kasus di mana Anda memerlukan informasi status pada utas / antrian lain.
naz

4

cepat 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
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
rollstuhlfahrer

karena tidak ada tulisan untuk cepat 4 membantu untuk cepat 4 orang
Shakeel Ahmed

kode akan memeriksa Anda menyatakan jika aplikasi di latar belakang! Misalkan jika Anda menerima pemberitahuan di latar belakang dan Anda ingin melakukan beberapa hal seperti melakukan beberapa tindakan jika pemberitahuan menerima ketika aplikasi di latar belakang kode batin akan dieksekusi
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

Ekstensi Swift 4.0 untuk membuatnya lebih mudah diakses:

import UIKit

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

Untuk mengakses dari dalam aplikasi Anda:

let myAppIsInBackground = UIApplication.shared.isBackground

Jika Anda mencari informasi tentang berbagai status ( active, inactivedan background), Anda dapat menemukan dokumentasi Apple di sini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.