iOSアプリがバックグラウンドにあるかどうかを確認する方法はありますか?


回答:


285

アプリデリゲートは、状態遷移を示すコールバックを取得します。それに基づいて追跡できます。

また、UIApplication のapplicationStateプロパティは現在の状態を返します。

[[UIApplication sharedApplication] applicationState]

64
ありがとう—さらに明確にするために、[[UIApplication sharedApplication] applicationState] == UIApplicationStateBackgroundです。
ポッドパーソン

39
[[UIApplication sharedApplication] applicationState] != UIApplicationStateActiveUIApplicationStateInactiveはバックグラウンドにあるのとほぼ同等なので、私はより良いと思います...
JP Illanes 2013年


2
アプリがバックグラウンドフェッチの目的で起動された場合、遷移コールバックが呼び出されないことがわかりました。
Mike Asdf 2016

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

これは、問題の解決に役立つ場合があります。

下のコメントを参照してください。非アクティブはかなり特殊なケースであり、アプリがフォアグラウンドで起動されている最中である可能性があります。それはあなたの目標に応じてあなたにとって「背景」を意味するかもしれませんし、そうでないかもしれません...


参考になります。働いていた
サランジス2017年

1
ドキュメントから:UIApplicationStateInactive-アプリはフォアグラウンドで実行されていますが、イベントを受信して​​いません。これは、中断の結果として、またはアプリがバックグラウンドとの間で移行しているために発生する可能性があります。
Andy Weinstein、

30

スウィフト3

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

逆も真実ですか?確認できます== .inactive || == .active(バックグラウンドスレッドで開くのではなく)フォアグラウンドにあるかどうかを確認しますか?
robertotomás19年

21

Swiftバージョン:

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

8

アプリケーションの状態について「尋ねる」のではなく、コールバックを受け取りたい場合は、次の2つのメソッドを使用します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をチェックすることにより、上記のソリューションの組み合わせを使用しました。
Justin Domnitz、2015年

これと同じ解決策があり、別のスレッド/キューの状態情報が必要な場合に適しています。
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

Swift 4へのボディ書き込みがないため、Swift 4の人々を支援
Shakeel Ahmed 2018

コードは、アプリがバックグラウンドかどうかをチェックします!バックグラウンドで通知を受信して​​いて、バックグラウンドでアプリが内部コードを実行するときに通知が受信された場合に何らかのアクションを実行するなどのアクションを実行したい場合
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

さまざまな状態(activeinactiveおよびbackground)に関する情報を探している場合は、こちらAppleのドキュメントを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.