2009-04-30 7 views
3

Ich habe eine BroadcastReceiver fangen ACTION_NEW_OUTGOING_CALL Ereignisse.Android - NEW_OUTGOING_CALL-Ereignisse durch Schleifen stoppen?

In der onReceive() Methode sende ich die angegebene Nummer zu einem neuen ListActivity, wo der Benutzer verschiedene neue Zielnummern aus einer Liste auswählen kann.

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

Unabhängig von der neuen Nummer muss sie sofort gewählt und nicht weiter bearbeitet werden.

Wie kann ich die BroadcastReceiver wissen, dass diese resultierende Nummer nicht noch einmal verarbeitet werden soll?

Antwort

5

Ich löste dies durch die Implementierung eines "Bypass Prefix" in meinem BroadcastReceiver. Wenn meine Client-App eine Nummer direkt anrufen möchte, fügt sie einfach das Präfix voran, bevor sie die ACTION_CALL Intent aufruft.

Wenn die gewählte Nummer, das (hart codiert) Präfix hat, das BroadcastReceiver den Präfix Streifen und ermöglicht es der Ruf als normal gehen:

Dies löst zwei Probleme auf einmal - nicht nur, dass dieser Anschlag Durch das Anruf-Looping kann ich die zusätzliche Verarbeitung für bestimmte Nummern umgehen, indem ich das Präfix in ihren Telefonbucheinträgen abspeichern kann.

+0

Hallo Alnitak, ich habe ein großes Problem mit diesem auf dem HTC Hero, ich benutze setResultData (null), um den Anruf zu blockieren, aber es scheint nicht richtig den Anruf zu blockieren. Es blockiert es in Ordnung, aber es ist ein Dialer-Symbol in der verwendeten Apps Bildschirm (halten Sie die Home-Taste gedrückt) und wenn Sie auf dieses klicken, es scheint zu versuchen, erneut anzurufen und disperses dann, haben Sie über so etwas gestoßen? Funktioniert gut in Vanille Android, aber mit großen Problemen auf dem HTC Hero –

+0

Ich habe keinen Helden. Es ist möglich, dass ihre spezielle Shell auch ausgehende Anrufe mit einer höheren Priorität als Ihre Anwendung abfängt. Versuchen Sie, die Priorität Ihres BroadcastReceivers zu ändern. – Alnitak

+0

aber dadurch bin ich nicht in der Lage, Anrufe auf bestimmte Nummer zu blockieren –

0

Die onReceive() - Methode im Broadcast-Empfänger empfängt eine Absicht als Argument. Extrahieren Sie das Paket aus der Intent mit Intent.getExtras(). Dieses Bündel enthält 3 Schlüsselwertpaare 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.

Wenn die OnReceive() erneut aufgerufen wird, diese Zahl ändert sich auf 98xxxxxx98 * oder 0 * Durch die Sternchen Überprüfung (*) am Ende der gewählten Nummer, kann es, wenn der OnReceive geschlossen werden() Methode wird zum ersten Mal oder die nächsten folgenden Male aufgerufen.

Verwandte Themen