Да, вы можете, но не обязательно сразу.
Существует структура, называемая структурой CoreTelephony, которая имеет класс CTCallCenter
.Одним из свойств этого класса является свойство callEventHandler
.Это блок, который срабатывает при изменении состояния телефонного звонка.Например:
CTCallCenter *callCenter = ...; // get a CallCenter somehow; most likely as a global object or something similar?
[callCenter setCallEventHandler:^(CTCall *call) {
if ([[call callState] isEqual:CTCallStateConnected]) {
//this call has just connected
} else if ([[call callState] isEqual:CTCallStateDisconnected]) {
//this call has just ended (dropped/hung up/etc)
}
}];
Это действительно обо всем, что вы можете сделать с этим.У вас нет доступа к телефонным номерам.Единственный другой полезный фрагмент информации - это свойство идентификатора в CTCall
, поэтому вы однозначно идентифицируете объект CTCall
.
ВНИМАНИЕ :
Этот обработчик событий не вызывается, если ваше приложение не на переднем плане!Если вы делаете и получаете вызовы, когда приложение находится в фоновом режиме, обработчик событий не будет запускаться до тех пор, пока ваше приложение снова не станет активным , после чего (согласно документации, указанной выше) обработчик событий будет вызван один раз.за каждый вызов , который изменил состояние, когда приложение находилось в фоновом режиме.