iOS: показывать оповещение при получении звонка?

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

Как работает скайп? С push-уведомлениями?

Спасибо

4 ответа

Решение

Если ваше приложение работает во время вызова, проверьте CoreTelephony Framework. CTCall класс предоставляет информацию о состоянии вызова. Я не использовал это сам, но вы можете найти это полезным.

extern NSString const *CTCallStateDialing;
extern NSString const *CTCallStateIncoming;
extern NSString const *CTCallStateConnected;
extern NSString const *CTCallStateDisconnected;

Редактировать:

CTCallCenter позволяет зарегистрироваться для изменения состояния события вызова. Как я уже говорил, ваше приложение должно быть запущено, чтобы знать, что что-то изменилось. Вы можете запросить максимальное время фоновой обработки (я думаю, что сейчас оно составляет 10 минут), когда ваше приложение перемещается в фоновый режим. Эти API доступны только в iOS 4.0 и более поздних версиях.

Ваш представитель приложения будет получать вызовы к различным методам протокола UIApplicationDelegate, когда происходят различные события. Одним из них является - (void)applicationWillResignActive:(UIApplication *)application метод, который вызывается для входящих звонков или текстовых сообщений, но может вызываться и по другим причинам.

См. Ссылку на протокол UIApplicationDelegate для получения дополнительной информации.

И, чтобы ответить на ту часть вашего вопроса, которую еще никто не трогал, Skype использует фоновые методы, специально предназначенные для поддержки приложения в фоновом режиме для приема вызовов VOIP. Немного из этого на самом деле работает, ожидая вызова. Если вы не претендуете на то, чтобы быть фоновым приложением для VOIP или аудио целей, вы не сможете этого сделать - и если вы ДЕЙСТВИТЕЛЬНО утверждаете, что вы это делаете, иначе вы никогда не попадете в магазин приложений.

Лучшее, что вы можете сделать, это зацепить applicationWillResignActive метод, который вызывается в основном всякий раз, когда ваше приложение теряет фокус (что происходит, когда поступает вызов, но также происходит по другим причинам, поэтому он не идеален).

Смотрите: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html

Другие вопросы по тегам