Pergunta

Eu tenho um BroadcastReceiver captura eventos ACTION_NEW_OUTGOING_CALL.

No método onReceive() Estou enviando o número fornecido para uma nova ListActivity, onde o usuário começa a escolher vários números de destino novos a partir de uma lista.

Quando o usuário seleciona um novo número a partir da lista Estou em seguida, iniciar um novo ACTION_CALL intenção com o novo número no campo URI. Alternativamente, o resultado pode ser o número original.

Seja qual for o novo número é, tem que ser marcado imediatamente e não processados ??ainda mais.

Como posso deixar o know BroadcastReceiver que este número resultante não deve ser processado mais uma vez?

Foi útil?

Solução

Eu resolvi isso implementando um "Bypass Prefixo" na minha BroadcastReceiver. Se meu aplicativo cliente quer chamar um número diretamente simplesmente anexa o prefixo antes de invocar o ACTION_CALL Intenção.

Se o número marcado tem o prefixo (hard coded), o BroadcastReceiver retira o prefixo e permite que a chamada para proceder como normal:

public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();
    if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
        String number = getResultData();
        if (number.startsWith(BYPASS_PREFIX)) {
             setResultData(number.substring(BYPASS_PREFIX.length()));
        } else {
             // do additional processing
        }
    }
}

Isso resolve dois problemas de uma só vez -. Não só este parada a chamada looping, ele também me dá uma maneira de contornar o processamento adicional para números específicos, armazenando o prefixo em suas entradas do livro de telefone

Outras dicas

O método OnReceive () no receptor Transmissão recebe um Intent como um argumento. Extraia o pacote de A intenção usando Intent.getExtras (). Este pacote contém 3 pares de valor-chave da seguinte forma:

  1. android.phone.extra.ALREADY_CALLED = null
  2. android.intent.extra.PHONE_NUMBER = 98xxxxxx98
  3. android.phone.extra.ORIGINAL_URI = tel: 98xxxxxx98

98xxxxxx98 é o número discado pelo usuário.

Quando o OnReceive () é chamado novamente, este número muda para 98xxxxxx98 * ou 0 * Verificando o asterisco (*) no final do número discado, pode-se inferir se o método OnReceive () é chamado pela primeira vez ou os próximos tempos posteriores.

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