Как определить, активно ли пользователь перезапускал приложение, щелкнув значок приложения?

Я хотел бы знать, выходит ли мое приложение на передний план, когда пользователь щелкает значок приложения (не имеет значения, начинается ли оно с нуля или становится активным из неактивного)

Но не из-за входящего звонка, покупки в приложении или чего-то еще.
(Я обнаружил, что applicationDidBecomeActive вызывается во время процесса покупки в приложении)


person eugene    schedule 16.10.2011    source источник


Ответы (1)


Шаг 1.
Если приложение запущено и ранее не работало в фоновом режиме (приостановлено), application:didFinishLaunchingWithOptions: будет выполняться первым. Этот метод имеет параметр launchOptions — когда он равен nil, ваше приложение было запущено с помощью нажатия значка в Springboard. В противном случае launchOptions укажет причину запуска приложения (URL-схема, push-уведомление и т. д.). Reference/Reference.html" rel="nofollow">документация).

Шаг 2.
Пока все хорошо. Теперь давайте позаботимся о возобновлении. Когда приложение возобновляется (или запускается), в какой-то момент оно вызывает applicationDidBecomeActive в делегате приложения. Хитрость в том, что этот метод вызывается после того, как все возможные причины, связанные с тем, что приложение может быть возобновлено (запущено), были обслужены. Поэтому все, что вам нужно сделать, это ввести флаг BOOL, который вы установите в методах, обслуживающих причину, по которой ваше приложение было возобновлено, и проверить его позже в applicationDidBecomeActive на соответствие ожидаемому значению.

Список (наверное, неполный) методов, где нужно установить ваш флаг:

  • application:handleOpenURL:
  • application:openURL:sourceApplication:annotation:
  • application:didReceiveLocalNotification:
  • application:didReceiveRemoteNotification:

Остальные методы вы найдете в документации. упоминалось выше. И помните, что applicationDidBecomeActive для шага 1 также будет вызываться.

Удачи!

person matm    schedule 16.10.2011