Frage

Ich habe ein BroadcastReceiver fangen ACTION_NEW_OUTGOING_CALL Ereignisse.

In der onReceive() Methode ich die mitgelieferte Nummer an einen neuen ListActivity senden, in dem der Benutzer verschiedene neue Zielnummern aus einer Liste zu wählen, wird.

Wenn der Benutzer eine neue Nummer aus der Liste auswählt bin ich dann eine neue ACTION_CALL Absicht mit der neuen Nummer im Feld URI starten. Alternativ könnte das Ergebnis die ursprüngliche Zahl.

Was auch immer die neue Nummer ist, hat sie gewählt werden, sofort und verarbeitet nicht weiter.

Wie kann ich lasse die BroadcastReceiver wissen, dass diese resultierende Zahl sollte nicht noch einmal bearbeitet werden?

War es hilfreich?

Lösung

ich beschlossen dies durch einen „Bypass Präfix“ in meinem BroadcastReceiver umzusetzen. Wenn meine Client-Anwendung will direkt eine Zahl nennt es einfach prepends das Präfix vor dem ACTION_CALL Intent aufgerufen wird.

Wenn die gewählte Nummer den (hart codiert) Präfix hat, streift die BroadcastReceiver das Präfix und ermöglicht es den Anruf normal ablaufen:

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

Dies löst zwei Probleme auf einmal -. Nicht nur diese den Anruf Looping nicht zu stoppen, es gibt mir auch eine Möglichkeit, die zusätzliche Verarbeitung für bestimmte Nummern zu umgehen, indem das Präfix in ihrem Telefonbucheintrag speichert

Andere Tipps

Die OnReceive () Methode im Broadcast-Empfänger empfängt eine Absicht als Argument. Extrahieren das Bündel von den Intent Verwendung Intent.getExtras (). Dieses Bundle enthält drei Schlüssel-Wert-Paare wie folgt:

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

98xxxxxx98 ist die Nummer vom Benutzer gewählt wird.

Wenn die OnReceive () erneut aufgerufen wird, diese Zahl ändert sich auf 98xxxxxx98 * oder 0 * Durch die Überprüfung für den Stern (*) am Ende der gewählten Nummer, kann gefolgert werden, wenn die OnReceive () -Methode zum ersten Mal oder die nächsten nachfolgenden Zeiten aufgerufen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top