Frage

Ich habe ein Programm, das automatisch einen Anruf gestartet wird, wenn Programm gestartet wird. Dies ist in AppDelegate der "applicationDidFinishLaunching" -Verfahren umgesetzt werden.

Das Problem ist: Wenn Anruf endet und mein App automatisch wieder startet, es startet die Schleife und Telefonanruf erneut gestartet

.

Wie erkennen, wenn App von diesem Aufruf zurückgegeben wurde? Oder irgendwie leicht den Zustand oder die Variablen des Programms speichern, die definieren, ob der Anruf wurde bereits gemacht?

Ich habe gerade angefangen iPhone-Programmierung und dies kam.

War es hilfreich?

Lösung

Ihre Anwendung starten Sie den Anruf Bevor mit, lesen Sie ein BOOL Flagge in der Anwendung NSUserDefaults Datenbank , ob es fragt diesen Anruf starten soll, zB callWasMade.

Wenn callWasMade auf eine anfängliche Vorgabe von NO gesetzt ist, dann setzen Sie das Flag auf YES, die Flagge des Wert speichern NSUserDefaults und dann den Anruf auslösen.

Auf dem anschließenden Start der Anwendung wird der Wert von callWasMade (YES) aus NSUserDefaults gelesen und der Anruf nicht ausgelöst bekommt.

An diesem Punkt sollte es sicher sein die Flagge des Wert Flip zurück zu NO dem nächsten Anruf zu ermöglichen.

Andere Tipps

Das kann nicht durchgeführt werden. Die Flagge Idee ist schön, bis Sie erkennen, dass nicht alle Anrufe Beendigung Sie die App zurück. Ein Beispiel dafür ist, wenn Sie den Anruf durch Drücken der Power-Taste oben auflegen.

Für diese Fälle wird die Flagge inkonsistent sein (dh. Beim nächsten Start der App wird denken, dass diese von einem Aufruf zurückkehren, wenn in der Tat ist es aus dem Home-Bildschirm gestartet wurde).

Um es zusammenzufassen gibt es keine Möglichkeit, eine Rückkehr aus dem Telefon alle zu erkennen, und ich habe Apple-Entwickler Unterstützung danach gefragt.

Sie können UIWebview verwenden, um einen Anruf zu tätigen, wie in dieser Frage erklärt:

zu App zurück Verhalten nach dem Telefonanruf unterschiedlich in nativen Code als UIWebView

und Nutzung Kern-Telefonie zu überprüfen, ob Anruf beendet:

//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");

        }

    };
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top