Как узнать, было ли приложение перезагружено после телефонного звонка? - PullRequest
3 голосов
/ 26 мая 2009

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

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

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

Я только начал программировать на iPhone, и это произошло.

Ответы [ 3 ]

3 голосов
/ 27 мая 2009

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

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

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

1 голос
/ 26 мая 2009

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

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

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

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

0 голосов
/ 26 сентября 2011

Вы можете использовать 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");

        }

    };
...