Wie zu erkennen, wenn app nach Anruf neu geladen wurde?
-
05-09-2019 - |
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.
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");
}
};