Как узнать, было ли приложение перезагружено после звонка?

StackOverflow https://stackoverflow.com/questions/910028

  •  05-09-2019
  •  | 
  •  

Вопрос

У меня есть программа, которая автоматически запускает телефонный звонок при запуске программы.Это реализовано в методе ApplicationDidFinishLaunching AppDelegate.

Проблема в следующем:Когда телефонный звонок заканчивается и мое приложение автоматически запускается снова, оно перезапускает этот цикл, и телефонный звонок начинается снова.

Как узнать, было ли приложение возвращено из этого вызова?Или как-то легко сохранить состояние или переменные программы, определяющие, был ли уже сделан вызов?

Я только начал программировать для iPhone, и вот это появилось.

Это было полезно?

Решение

Прежде чем приложение запустит телефонный звонок, прочитайте BOOL флаг в приложение NSUserDefaults база данных который спрашивает, следует ли запускать этот вызов, например. callWasMade.

Если callWasMade установлено начальное значение по умолчанию NO, затем установите флаг YES, сохраните значение флага в NSUserDefaults а затем вызвать телефонный звонок.

При последующем запуске вашего приложения значение callWasMade (YES) читается из NSUserDefaults и звонок не срабатывает.

В этот момент можно безопасно вернуть значение флага на NO чтобы разрешить следующий вызов.

Другие советы

Это невозможно сделать.Идея с флагом хороша, пока вы не поймете, что не все завершения вызовов возвращают вас в приложение.Одним из примеров этого является то, что вы повесили трубку, нажав верхнюю кнопку питания.

В этих случаях флаг будет противоречивым (т.при следующем запуске ваше приложение будет думать, что это возврат из вызова, хотя на самом деле оно было запущено с главного экрана).

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

Вы можете использовать UIWebview для совершения вызова, как описано в этом вопросе:

Возврат к поведению приложения после телефонного звонка, который отличается по собственному коду от 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");

        }

    };
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top