Как узнать, было ли приложение перезагружено после звонка?
-
05-09-2019 - |
Вопрос
У меня есть программа, которая автоматически запускает телефонный звонок при запуске программы.Это реализовано в методе ApplicationDidFinishLaunching AppDelegate.
Проблема в следующем:Когда телефонный звонок заканчивается и мое приложение автоматически запускается снова, оно перезапускает этот цикл, и телефонный звонок начинается снова.
Как узнать, было ли приложение возвращено из этого вызова?Или как-то легко сохранить состояние или переменные программы, определяющие, был ли уже сделан вызов?
Я только начал программировать для iPhone, и вот это появилось.
Решение
Прежде чем приложение запустит телефонный звонок, прочитайте BOOL
флаг в приложение NSUserDefaults
база данных который спрашивает, следует ли запускать этот вызов, например. callWasMade
.
Если callWasMade
установлено начальное значение по умолчанию NO
, затем установите флаг YES
, сохраните значение флага в NSUserDefaults
а затем вызвать телефонный звонок.
При последующем запуске вашего приложения значение callWasMade
(YES
) читается из NSUserDefaults
и звонок не срабатывает.
В этот момент можно безопасно вернуть значение флага на NO
чтобы разрешить следующий вызов.
Другие советы
Это невозможно сделать.Идея с флагом хороша, пока вы не поймете, что не все завершения вызовов возвращают вас в приложение.Одним из примеров этого является то, что вы повесили трубку, нажав верхнюю кнопку питания.
В этих случаях флаг будет противоречивым (т.при следующем запуске ваше приложение будет думать, что это возврат из вызова, хотя на самом деле оно было запущено с главного экрана).
Подводя итог, невозможно обнаружить возврат телефона, и я обратился по этому поводу в службу поддержки разработчиков Apple.
Вы можете использовать UIWebview для совершения вызова, как описано в этом вопросе:
и используйте базовую телефонию, чтобы проверить, завершился ли вызов:
//before calling loadRequest:
CTCallCenter *callCenter.callEventHandler=^(CTCall* call) {
if(call.callState == CTCallStateDialing)
{
//The call state, before connection is established, when the user initiates the call.
NSLog(@"Dialing");
}
if(call.callState == CTCallStateIncoming)
{
//The call state, before connection is established, when a call is incoming but not yet answered by the user.
NSLog(@"Incoming Call");
}
if(call.callState == CTCallStateConnected)
{
//The call state when the call is fully established for all parties involved.
NSLog(@"Call Connected");
}
if(call.callState == CTCallStateDisconnected)
{
[self release];
NSLog(@"Call Ended");
}
};