Apps für Android programmieren leicht gemacht!

Auf SMS reagieren

In diesem Artikel wollen wir klären, wie wir auf eingehende, also empfangene, SMS Nachrichten reagieren und bei einer empfangenen SMS unsere App öffnen.

Die selbe Technik/Funktion nutzt beispielsweise auch Whatsapp, um eine Handynummer zu bestätigen. Hier wird nach der Berechtigung zum Lesen der SMS gefragt. Anschließend erhält man eine SMS von den WhatsApp Servern und hat sein Abo bestätigt.
Persönlich habe ich mich privat damit beschäftigt eine kleine SMS Weiterleitung zu programmieren. Der Hintergrund war dazu, dass ich eine neue Handynummer habe und auch ein neues Handy. Leider kein neues Dual-Sim Handys und zwei Handy „mitschleppen“ ist mir zu umständlich. Habe lieber nur eines dabei und die Hosentasche schön „leer“.
Nun ist es so, dass ich meine alte Handynummer bei allen möglichen Diensten zur Zwei-Faktor Authentifizierung registriert habe. Google oder PayPal meine neue Handynummer zu geben ist ja nicht das Ding, aber denkt man an alle Dienste? – Ich sicher nicht. Dann sitzt man irgendwo und hat keinen Zugriff. Ärgerlich.

Also habe ich mir kurzum gedacht mein altes Handy mit samt der alten Nummer Zuhause an der Steckdose zu lassen und mir meine SMS einfach auf das neue Handy schicken zu lassen. Ohne Netzbetreiber. Ohne mögliche Zusatzkosten.
Dieser Artikel beschreibt dabei den ersten Schritt. Das Empfangen und reagieren auf eingehende SMS. Ich will also meine App öffnen, wenn eine SMS Empfangen wird.

Für unser eigentliches Anliegen sind Änderungen in lediglich zwei Dateien von Nöten.
Um genau zu sein, sind es vielleicht sogar drei. ;P

 

AndroidManifest.xml :

<manifest ...>

   ...

   <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
   <uses-permission android:name="android.permission.READ_SMS" />

   ...

   <application ...>

      ...

      <receiver android:name=".EingehendeSms">         
         <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
         </intent-filter>
      </receiver>

      ...

   </application>
   ...
</manifest>

Mit den Zeilen 5 und 6 fragen wir nach der Berechtigung SMS lesen zu dürfen.
Mit den Zeilen 14-18 registrieren wir eine Java Klasse Namen „EingehendeSMS“, die von Android gestartet wird, wenn wir eine SMS erhalten. In eben dieser Klasse können wir dann auch unsere gerade empfangene SMS auslesen und damit machen, was immer wir wollen.

 

EingehendeSMS.java:

Bitte erstellt ech hierzu eine neue Java Klasse und nennt diese „EingehendeSMS“.
In diese schreibt ihr nach der Zeile, die mit „package“ anfängt:

public class EingehendeSMS extends BroadcastReceiver {

    final SmsManager sms = SmsManager.getDefault();

    public void onReceive(Context context, Intent intent) {
        final Bundle bundle = intent.getExtras();
        try {
            if (bundle != null) {
                final Object[] pdusObj = (Object[]) bundle.get("pdus");
                for (int i = 0; i < pdusObj.length; i++) {

                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String sms = currentMessage.getDisplayMessageBody();
                    String handynummer = currentMessage.getDisplayOriginatingAddress(); 

                } 
            }
        } catch (Exception e) {
            Log.e("SmsReceiver", e);

        }
    }    
}

 

Der dritte Schritt:

Also eigentlich ist unser Artikel hier am Ende angekommen und unsere App ist fertig.
Wenn ihr unter Android 6 oder höher arbeitet müsst ihr jedoch noch in der Hauptapp (nicht in dem eben programmierten) nach der Berechtigung fragen. Ähnlich, wie bei WhatsApp halt.

Wie ihr das anstellt erfahrt ihr hier: https://droid-lernen.de/android-6-berechtigung-einholen/

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld