Есть ли способ проверить, находится ли приложение iOS в фоновом режиме?
Я хочу проверить, работает ли приложение в фоновом режиме.
В:
locationManagerDidUpdateLocation {
if(app is runing in background){
do this
}
}
9 ответов
Делегат приложения получает обратные вызовы, указывающие переходы состояний. Вы можете отслеживать это на основе этого.
Также свойство applicationState в UIApplication возвращает текущее состояние.
[[UIApplication sharedApplication] applicationState]
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive)
{
//Do checking here.
}
Это может помочь вам в решении вашей проблемы.
См. Комментарий ниже - неактивное является довольно частным случаем и может означать, что приложение находится в процессе запуска на передний план. Это может или не может означать "фон" для вас в зависимости от вашей цели...
Свифт 3
let state = UIApplication.shared.applicationState
if state == .background {
print("App in Background")
}
Swift версия:
let state = UIApplication.sharedApplication().applicationState
if state == .Background {
print("App in Background")
}
Свифт 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
}
Если вы предпочитаете получать обратные вызовы вместо "спрашивать" о состоянии приложения, используйте эти два метода в своем AppDelegate
:
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"app is actvie now");
}
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"app is not actvie now");
}
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
}
Расширение Swift 4.0 для облегчения доступа к нему:
import UIKit
extension UIApplication {
var isBackground: Bool {
return UIApplication.shared.applicationState == .background
}
}
Чтобы получить доступ из вашего приложения:
let myAppIsInBackground = UIApplication.isBackground
Если вы ищете информацию о различных штатах (active
, inactive
а также background
), вы можете найти документацию Apple здесь.
Благодаря Шакилу Ахмеду это сработало для меня в Swift 5.
switch UIApplication.shared.applicationState {
case .active:
print("App is active")
case .inactive:
print("App is inactive")
case .background:
print("App is in background")
default:
return
}
Надеюсь, кому-нибудь поможет =)