अगर आईओएस ऐप पृष्ठभूमि में है, तो क्या इसकी जांच करने का कोई तरीका है?


186

मैं जांचना चाहता हूं कि ऐप पृष्ठभूमि में चल रहा है या नहीं।

में:

locationManagerDidUpdateLocation {
    if(app is runing in background){
        do this
    }
}

क्या आप locationManager:didUpdateToLocation:fromLocation:विधि के बारे में बात कर रहे हैं ?
ब्लैक फ्रॉग

जवाबों:


285

ऐप प्रतिनिधि को राज्य परिवर्तन का संकेत देने वाले कॉलबैक मिलते हैं। आप उसी के आधार पर इसे ट्रैक कर सकते हैं।

इसके अलावा applicationState UIApplication में संपत्ति वर्तमान स्थिति देता है।

[[UIApplication sharedApplication] applicationState]

64
धन्यवाद - और अतिरिक्त स्पष्टता के लिए [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground।
पॉडपर्सन

39
मुझे लगता [[UIApplication sharedApplication] applicationState] != UIApplicationStateActiveहै कि बेहतर है, क्योंकि UIApplicationStateInactive पृष्ठभूमि में लगभग बराबर है ...
जेपी इलनेस

6
राज्यों को यहाँ वर्तनी दी गई है: developer.apple.com/library/ios/documentation/uikit/reference/…
Dan Rosenstark

2
मैंने पाया है कि यदि आपके ऐप को पृष्ठभूमि लाने के उद्देश्यों के लिए लाया जाता है तो संक्रमण कॉलबैक को कॉल नहीं किया जाता है।
माइक एसएफडी

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

यह आपकी समस्या को हल करने में आपकी मदद कर सकता है।

नीचे टिप्पणी देखें - निष्क्रिय एक विशेष मामला है, और इसका मतलब यह हो सकता है कि ऐप अग्रभूमि में लॉन्च होने की प्रक्रिया में है। आपके लक्ष्य के आधार पर आपके लिए "पृष्ठभूमि" का मतलब हो सकता है या नहीं भी हो सकता है ...


अच्छा, मददगार जवाब। काम किया
सरनजीत

1
डॉक्स से: UIApplicationStateInactive - ऐप अग्रभूमि में चल रहा है, लेकिन ईवेंट प्राप्त नहीं कर रहा है। यह एक रुकावट के परिणामस्वरूप हो सकता है या क्योंकि एप्लिकेशन पृष्ठभूमि से या उससे संक्रमण कर रहा है।
एंडी वाइंस्टीन

30

स्विफ्ट 3

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

क्या रिवर्स भी सच है? क्या मैं जांच कर सकता हूं ==। सक्रिय || ==। यह देखने के लिए कि क्या यह अग्रभूमि में है (पृष्ठभूमि धागे पर खोलने के विपरीत)?
रॉबर्टो टोमोस

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 वापस आ जाएगी। इसने मुझे थोड़ा दूर फेंक दिया। इसलिए, मैंने ApplicationWidBecomeActive के बजाय ApplicationDateBecomeActive (गलत तरीके से) के भीतर से अपस्ट्रीम समाधानों के संयोजन का उपयोग किया।
जस्टिन डोमनिट्ज़

मेरे पास इसका एक ही समाधान था और यह उन मामलों के लिए उपयुक्त है जहां आपको किसी अन्य थ्रेड / कतार पर राज्य की जानकारी चाहिए।
naz

4

तेज ५

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
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, क्यों और / या इस कोड के उत्तर के बारे में अतिरिक्त संदर्भ प्रदान करने से प्रश्न इसके दीर्घकालिक मूल्य में सुधार करता है।
रोलस्टुफ़्लोरहेयर

क्योंकि कोई भी शव स्विफ्ट 4 के लिए नहीं लिखता है, जो तेज 4 लोगों की मदद करता है
शकील अहमद

कोड पृष्ठभूमि में एप्लिकेशन अगर आप राज्य की जाँच करेगा! मान लीजिए यदि आप पृष्ठभूमि में अधिसूचना प्राप्त कर रहे हैं और आप चाहते हैं कि कुछ सामान की तरह कुछ कार्रवाई करें यदि अधिसूचना प्राप्त होती है जब पृष्ठभूमि में एप्लिकेशन आंतरिक कोड निष्पादित करेगा
शकील अहमद

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

इसे थोड़ा आसान बनाने के लिए स्विफ्ट 4.0 एक्सटेंशन:

import UIKit

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

अपने एप्लिकेशन से एक्सेस करने के लिए:

let myAppIsInBackground = UIApplication.shared.isBackground

आप देख विभिन्न राज्यों के बारे में जानकारी के लिए कर रहे हैं ( active, inactiveऔर background), आप पा सकते हैं एप्पल प्रलेखन यहाँ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.