Как мы все знаем, если приложение iOS работает на переднем плане, приложение не будет уведомлять пользователей о появлении уведомления об удалении. Теперь в моем приложении я хочу показать предупреждение для уведомления пользователей о том, что приходит удаленное уведомление. Как определить, работает ли приложение на переднем плане или в фоновом режиме? Я нашел документы и искал stackoverflow.com и не смог найти ничего об этом. Спасибо.
IOS как судить приложение работает на переднем плане или на заднем плане?
Ответ 1
[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;
}
Ответ 2
Бывают случаи, когда проверка состояния не работает.
Вот один из тех, с которыми я столкнулся: если вы попытаетесь использовать BT и он отключен, iOS откроет диалоговое окно с вопросом, хотите ли пользователь включить BT. Когда это произойдет, состояние приложения не является надежным способом определить, находится ли ваше приложение на переднем плане.
Прежде всего, вы получите два события applicationDidBecomeActive: один (правильно), когда приложение появится, а затем другое (неправильно) после нажатия пользователем кнопки в диалоговом окне (в то время как настройки iOS - это самое главное приложение).
UIApplication.applicationState будет говорить "Активный", хотя это не так (по крайней мере, если вы интерпретируете "активный" как находящийся на переднем плане, как и исходный вопрос).
Поскольку вы не получаете willEnterForeground при первом запуске, единственный надежный способ обнаружения видимости приложения или нет (насколько мне удалось выяснить) - иметь флаг, а затем установить его в true в:
applicationDidFinishLaunching
applicationWillEnterForeground
и false:
applicationDidEnterBackground
applicationWillResignActive