jackabe
jackabe

Reputation: 365

Swift 3: Checking if app is in background

I need to check if the app is moved to the background. Why?

Well because my app works with bluetooth and only one person can be connected to this device at a time. Therefore if they are not using it and the app is in the background, disconnect them and send them to the connect main page.

Now I have accomplished this. I have a selector in the main first class and a function to disconnect and send to first page. But what I didn't realise is that if the control panel is dragged up, the app is in the 'background'.

From looking around there doesn't seem to be a way to detect if the control panel is brought up. So does anyone have any ideas on how I can do this differently?

Realistically I just want it so if the app is moved to the background for any other reason than the control panel being brought up, disconnect from the device.

Selector:

let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationWillResignActive, object: nil)

Function:

@objc func appMovedToBackground() {
        if (ViewController.connectedPeripheral != nil) {
            print("App moved to background!")
            let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
            let nextViewController = storyBoard.instantiateViewController(withIdentifier: "connectView") as! ViewController
            self.navigationController?.pushViewController(nextViewController, animated: true)
            ViewController.centralManager.cancelPeripheralConnection(ViewController.connectedPeripheral!)
        }
        else {
            print("App moved to background but no device is connected so no further action taken")
        }
    }

This is not a duplicate of other questions. I know how to check if app is in background state. I just don't want to disconnect when the control panel is brought up...

Upvotes: 4

Views: 3321

Answers (3)

ppalancica
ppalancica

Reputation: 4277

In Swift:

if UIApplication.shared.applicationState == .background {
    // Add code here...
}

In Objective-C:

if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
    // Add code here...
}

Hope it works!

Upvotes: 5

user8355673
user8355673

Reputation:

Then you can use this also. After entering in background state , app will be moved to inactive state.

override func viewDidLoad() {
    super.viewDidLoad()

    let app = UIApplication.shared

    //Register for the applicationWillResignActive anywhere in your app.
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.applicationWillResignActive(notification:)), name: NSNotification.Name.UIApplicationWillResignActive, object: app)
}

func applicationWillResignActive(notification: NSNotification) {

}

Upvotes: 0

user8361334
user8361334

Reputation:

Have you tried with adding observer to willResignActive in your view controller?

NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: .UIApplicationWillResignActive, object: nil)


func willResignActive(_ notification: Notification) {
    // code to execute
}

Upvotes: 1

Related Questions