2010-07-14

Schnüffeln erlaubt – eingehende Anrufe

Mitzubekommen wenn oder wann das Telefon klingelt, ist nicht nur für den Nutzer (meistens) erstrebenswert – auch aus Sicht der Software kann es sich lohnen, sozusagen an der Leitung zu lauschen. Wie das unter Android funktioniert, zeigt dieser Eintrag.

Um die folgenden Quelltextfragmente ausprobieren zu können, müssen Sie sie nur in eine rudimentäre Activity packen. Den Anfang machen zwei Variablendeklarationen:

private PhoneStateListener listener;
private TelephonyManager m;
Java2html

Der TelephonyManager gestattet den Zugriff auf zahlreiche Telefonie-bezogenen Funktionen. Eine Instanz dieses Dienstes erhält man so:

m = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Java2html

Um auf eingehende Anrufe reagieren zu können, ist nur eine Zeile Code nötig:

m.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
Java2html

Schließlich noch der eigentliche Listener:

listener = new PhoneStateListener() {

  @Override
  public void onCallStateChanged(int state, String incomingNumber) {
    if (TelephonyManager.CALL_STATE_RINGING == state) {
      Log.d(getClass().getName(), incomingNumber);
    }
  }
};
Java2html

Android-typisch lässt sich also mit sehr wenig Quelltext die Telefonnummer von eingehenden Anrufen auslesen. Ebenfalls Android-typisch muss die Anwendung das entsprechende Recht allerdings anfordern. Das sieht dann so aus:

<uses-permission android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
Java2html

Nun möchte ich Ihnen noch zeigen, wie Sie mit dem Emulator ein eingehendes Gespräch simulieren. Hierzu ist eine telnet-Verbindung zum Emulator herzustellen und dann das Kommando gsm call abzusetzen.

telnet-Verbindung zum Emulator 
telnet-Verbindung zum Emulator

Und so sieht der eigehende Anruf dann aus:

Ein simulierter eingehender Anruf 
Ein simulierter eingehender Anruf

Was kann man mit so einer Funktionalität alles realisieren? Statistiken ein- und ausgehender Anrufe, Anrufhäufigkeiten… Haben Sie eine Idee? Schreiben Sie mir.

1 comment:

  1. Ich hab deinen Blog gerade entdeckt, ist also die Begründung für den späten Eintrag :)

    Anwendungs-Idee: Ich möchte Anrufer, die keine Nummer übertragen, zu bestimmten Zeiten an bestimmten Tagen nicht annehmen bzw. nicht mal mitbekommen. Das ist beispielsweise immer Nachts der Fall...

    Oder auch bekannte Anrufer nach Zeit aussortieren wäre ein super Feature.

    Vielleicht inspiriert dich das ja :)

    ReplyDelete