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 
Другие вопросы по тегам