Подтвердить что ты не робот

IOS как судить приложение работает на переднем плане или на заднем плане?

Как мы все знаем, если приложение iOS работает на переднем плане, приложение не будет уведомлять пользователей о появлении уведомления об удалении. Теперь в моем приложении я хочу показать предупреждение для уведомления пользователей о том, что приходит удаленное уведомление. Как определить, работает ли приложение на переднем плане или в фоновом режиме? Я нашел документы и искал stackoverflow.com и не смог найти ничего об этом. Спасибо.

4b9b3361

Ответ 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