iOS, как судить, приложение работает на переднем или на заднем плане?
Как все мы знаем, если приложение для iOS работает на переднем плане, то оно не будет уведомлять пользователей о появлении уведомления об удалении. Теперь в моем приложении я хочу показать предупреждение, чтобы уведомить пользователей о том, что приходит удаленное уведомление. Как судить, работает ли приложение на переднем или на заднем плане? Я нашел документы и искал stackru.com и не смог найти ничего об этом. Спасибо.
2 ответа
[UIApplication sharedApplication].applicationState
вернет текущее состояние, проверит его возможные значения и не будет создавать ненужных флагов, когда вы сможете использовать системные функции.
Значения, которые вы можете рассмотреть:
- UIApplicationStateActive
- UIApplicationStateInactive
- UIApplicationStateBackground
например
+(BOOL) runningInBackground
{
UIApplicationState state = [UIApplication sharedApplication].applicationState;
return state == UIApplicationStateBackground;
}
+(BOOL) runningInForeground
{
UIApplicationState state = [UIApplication sharedApplication].applicationState;
return state == UIApplicationStateActive;
}
Есть случаи, когда проверка состояния не работает.
Вот одна из них, с которой я столкнулся: если вы попытаетесь использовать BT, а он отключен, iOS выведет диалоговое окно с вопросом, хочет ли пользователь включить BT. Когда это происходит, состояние приложения не является надежным способом определения того, находится ли ваше приложение на переднем плане.
Прежде всего, вы получите два события applicationDidBecomeActive - одно (правильно), когда приложение появляется, а затем другое (неправильно) после того, как пользователь нажмет кнопку в диалоговом окне (в то время как настройки iOS - самое переднее приложение).
UIApplication.applicationState будет говорить "Active", даже если это не так (по крайней мере, если вы интерпретируете "active" как находящийся на переднем плане, как это было в первоначальном вопросе).
Поскольку вы не получаете willEnterForeground при первом запуске, единственный надежный способ определить, является ли приложение видимым или нет (насколько я смог выяснить), это иметь флаг и затем установить его в true в:
applicationDidFinishLaunching
applicationWillEnterForeground
и ложь в:
applicationDidEnterBackground
applicationWillResignActive