Странное функционирование события приложения в iPhone - PullRequest
0 голосов
/ 01 декабря 2009

Приложение для iPhone закрывается при любом вызове, принятом пользователем. После завершения вызова приложение возобновится.

Я хочу зафиксировать это событие, когда приложение возобновит работу после завершения вызова. Как бы я ни пытался: в приложении делегат: - (void) applicationWillTerminate: (UIApplication *) приложение - (void) applicationDidFinishLaunching: (UIApplication *) приложение - (void) applicationDidBecomeActive: (UIApplication *) приложение - (void) applicationWillResignActive: (UIApplication *) application

при просмотре нагрузки: viewDidLoad ViewwillAppear

Но ни одно из вышеперечисленных событий не происходит. Не знаю, откуда мне знать, что пользователь возвращается после получения звонка.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

При первом получении вызова делегату приложения отправляется сообщение applicationWillResignActive:, в то время как система отображает диалоговое окно входящего вызова.

Если пользователь отклоняет вызов, делегат приложения получает сообщение applicationDidBecomeActive, и приложение может возобновить работу.

Если пользователь принимает вызов, делегат приложения получает сообщение applicationWillTerminate, и вы должны подготовить приложение к закрытию. Затем система закрывает приложение.

Вы не можете заставить систему перезапустить ваше приложение после завершения вызова.

Если ни один из этих методов не вызывается в делегате, наиболее вероятное объяснение состоит в том, что делегат не назначен должным образом.

Похоже, вы путаете делегата приложения с одним из ваших контроллеров представления. Не ожидается, что делегат приложения будет отвечать на «viewDidLoad» другие сообщения UIViewController.

Edit01:

При втором чтении звучит так, будто вы хотите, чтобы приложение вернулось в состояние, в котором оно находилось до выхода, в ответ на телефонный звонок.

Если это так, то вы не хотите ловить событие. Когда приложение перезапускается после вызова, оно не получает специального события, т.е. оно запускается так же, как если бы пользователь запустил его. Я думаю, что вам нужно сделать, это сохранить состояние приложения до его закрытия, а затем вернуться в это состояние при следующем запуске.

0 голосов
/ 15 марта 2010

TechZen верен - никакой специальной структуры обработки резюме после звонка. Если вы хотите обнаружить это, вам нужно сохранить некоторую информацию о состоянии во время завершения работы приложения, а затем проверить ее при возобновлении работы приложения.

Один из способов сделать это - использовать флаг, установленный в applicationWillResignActive (например, bIncomingEventInterrupt = YES) и applicationDidResignActive (bIncomingEventInterrupt = NO) и applicationDidBecomeActive (bIncomingEventInterrupt = NO). Затем в applicationWillTerminate проверьте состояние этого флага.

Если поступил входящий вызов, флаг будет установлен в значение true. Если пользователь принимает вызов, приложение закрывается с флагом = YES, и вам следует сохранить некоторый список свойств и т. Д., Который содержит информацию, которую вы проверяете при запуске приложения (applicationDidFinishLaunching). Если пользователь отклоняет вызов, флаг будет сброшен как ложный, и приложение должно затем вызвать некоторый непостоянный код по умолчанию во время завершения работы. Вы можете / должны очистить сохраненные данные либо в didFinishLaunching, либо в ветке "non-persist" willTerminate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...