Domanda

Ho un programma che lancia automaticamente una telefonata quando si avvia il programma. Questo è implementato in -Metodo "applicationDidFinishLaunching" di AppDelegate.

Il problema è: Al termine della telefonata e la mia app lancia automaticamente di nuovo, si riavvia quel ciclo e telefonata viene avviata di nuovo

.

Come riconoscere se l'applicazione è stato restituito da questa chiamata? O in qualche modo facilmente salvare lo stato o le variabili del programma che definiscono se la chiamata è stata già fatta?

Ho appena iniziato la programmazione iPhone e questo si avvicinò.

È stato utile?

Soluzione

Prima di avere l'applicazione lanciare la telefonata, leggere una bandiera BOOL nel applicazione di database NSUserDefaults che chiede se dovrebbe lanciare quella chiamata, ad esempio, callWasMade.

Se callWasMade è impostato su un valore predefinito iniziale di NO, quindi impostare il flag a YES, salvare il valore della bandiera per NSUserDefaults e quindi attivare la telefonata.

Al successivo lancio dell'applicazione, il valore di callWasMade (YES) viene letto da NSUserDefaults e la chiamata non viene attivato.

A questo punto, dovrebbe essere sicuro di capovolgere il valore della bandierina di nuovo a NO per consentire la chiamata successiva.

Altri suggerimenti

Questo non può essere fatto. L'idea bandiera è bello fino a quando si rende conto che non tutti i talk si ritorna al app. Un esempio di questo è che se si riaggancia la chiamata premendo il tasto di accensione in alto.

In questi casi, la bandiera sarà incoerenti (es. Sul prossimo lancio la vostra applicazione sarà pensare che questo sta tornando da una chiamata quando in realtà è stato lanciato dalla schermata principale).

Quindi, per riassumere non v'è alcun modo per rilevare un ritorno dal telefono tutti ed ho chiesto il supporto di Apple su questo dev.

È possibile utilizzare UIWebView per effettuare una chiamata, come spiegato in questa domanda:

Torna a app comportamento dopo telefonata diverso nel codice nativo di UIWebView

e l'uso di base di telefonia per verificare se chiamata è terminata:

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

        }

    };
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top