Pergunta

Eu tenho um programa que inicia automaticamente uma chamada de telefone quando o programa é iniciado. Isso é implementado em -method "applicationDidFinishLaunching" do AppDelegate.

O problema é:. Quando terminar a chamada de telefone e meu aplicativo automaticamente lançamentos de novo, ele reinicia essa chamada loop e telefone é iniciado novamente

Como reconhecer se o aplicativo foi retornado do que a chamada? Ou de alguma forma facilmente salvar o estado ou variáveis ??do programa que definem se a chamada já foi feito?

Eu só comecei a programação iPhone e este veio.

Foi útil?

Solução

Antes de ter seu lançamento aplicação do telefonema, ler uma bandeira BOOL na NSUserDefaults aplicação banco de dados que pergunta se ele deve lançar essa chamada, por exemplo, callWasMade.

Se callWasMade está definido para um padrão inicial de NO, em seguida, definir o sinalizador para YES, salvar o valor da bandeira para NSUserDefaults e, em seguida, acionar o telefonema.

No lançamento posterior de sua aplicação, o valor de callWasMade (YES) é lida a partir NSUserDefaults ea chamada não for acionado.

Nesse ponto, ele deve ser seguro para virar valor de volta da bandeira para NO para permitir que a próxima chamada.

Outras dicas

Isto não pode ser feito. A ideia bandeira é bom até você perceber que nem todas as chamadas de terminação retorna para o aplicativo. Um exemplo disto é se você desligar a chamada pressionando o botão de energia superior.

Para esses casos, a bandeira será inconsistente (ie. Durante a próxima inicialização seu aplicativo vai pensar que este está voltando de uma chamada quando na verdade ele foi lançado a partir da tela inicial).

Assim, para resumir não há nenhuma maneira de detectar um retorno a partir do telefone todos e pedi apoio dev a Apple sobre isso.

Você pode usar UIWebView para fazer uma chamada, como explicado nesta pergunta:

Voltar ao aplicativo comportamento após diferente telefonema em código nativo que UIWebView

e uso de telefonia núcleo para verificar se chamada terminou:

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

        }

    };
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top