Domanda

Ho un BroadcastReceiver che cattura ACTION_NEW_OUTGOING_CALL .

Nel metodo onReceive () invio il numero fornito a un nuovo ListActivity , dove l'utente può scegliere vari nuovi numeri di destinazione da un elenco.

Quando l'utente seleziona un nuovo numero dall'elenco, sto iniziando un nuovo ACTION_CALL con il nuovo numero nel campo URI. In alternativa, il risultato potrebbe essere il numero originale.

Qualunque sia il nuovo numero, deve essere composto immediatamente e non elaborato ulteriormente.

Come posso far sapere a BroadcastReceiver che questo numero risultante non dovrebbe essere elaborato di nuovo?

È stato utile?

Soluzione

L'ho risolto implementando un "Bypass Prefix" nel mio BroadcastReceiver . Se la mia app client vuole chiamare direttamente un numero, semplicemente antepone il prefisso prima di invocare l'intento ACTION_CALL .

Se il numero composto ha il prefisso (hardcoded), BroadcastReceiver rimuove il prefisso e consente alla chiamata di procedere normalmente:

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
        }
    }
}

Ciò risolve due problemi in una volta sola: non solo questo interrompe il loop delle chiamate, ma mi dà anche un modo per aggirare l'elaborazione aggiuntiva per numeri specifici memorizzando il prefisso nelle voci della rubrica.

Altri suggerimenti

Il metodo onReceive () nel ricevitore Broadcast riceve un Intent come argomento. Estrai il Bundle dall'Intent usando Intent.getExtras (). Questo pacchetto contiene 3 coppie chiave-valore come segue:

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

98xxxxxx98 è il numero composto dall'utente.

Quando si chiama nuovamente onReceive (), questo numero cambia in 98xxxxxx98 * o 0 * Controllando l'asterisco (*) alla fine del numero composto, si può dedurre se il metodo onReceive () viene chiamato per la prima volta o le successive successive.

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