Android: Zwei Arten SMS zu verschicken

Bei unserer Anwendung InstaHelperAE geht es darum verschiedene vordefinierte Notfall SMS zu verschicken. Hierbei soll der Benutzer nur nach Ampelfarben auswählen (grün – gelb bis rot / Notfall) und Text u. Empfänger sind bereits festgelegt. Einfach Button klicken. SMS wird verschickt. Fertig.

https://www.terminal-systems.de/wp/instahelpae-notfall-sms-app/

U.a. bietet uns Android für den Versand von SMS Textnachrichten zwei Möglichkeiten:

Variante 1: Über Intent mit Permission.SEND_SMS

private void SendSMS (String myNummer, String myText) {
    //------------------------------------------------
    //Send SMS
    //------------------------------------------------

    if ((myNummer.isEmpty()) || (myText.isEmpty())) {
        return;
    }


//Kleiner Sonderfall: wir checken ob Permission gesetzt!
    if ( ContextCompat.checkSelfPermission( this, android.Manifest.permission.SEND_SMS ) != PackageManager.PERMISSION_GRANTED ) {
        Toolkits.MessageBox(this, "SMS Permission is Missing!", "Error");
        ActivityCompat.requestPermissions( this, new String[] {  android.Manifest.permission.SEND_SMS  }, 0);
        return;
    }

    Intent intent=new Intent(getApplicationContext(),MainActivity.class);
    PendingIntent pi=PendingIntent.getActivity(getApplicationContext(), 0, intent,0);

    SmsManager sms=SmsManager.getDefault();
    sms.sendTextMessage(myNummer, null, myText, pi,null);

//User soll OK Meldung sehen!
    Toolkits.MessageBox(this, "SMS Send", "OK");

}

Dazu im Manifest die Permisson:

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

Bei dieser Variante wird die SMS direkt aus der App automatisch verschickt. Auf Tastendruck raus mit dem Ding und gut ist. Mit Ausnahme der o.a. Messagebox sieht der Anwender nix vom Erfolg oder Misserfolg!

Oder halt die Variante 2 mit Common Intent ACTION_SENDTO

public void SendSMS(String myTel, String message, Uri attachment) {

    Uri uri = Uri.parse("smsto:" + myTel);
    Intent it = new Intent(Intent.ACTION_SENDTO, uri);
    it.putExtra("sms_body", message);
//Keine Verwendung fuer attachment
    startActivity(it);
}

Vorneweg sei gesagt: das mit ACTION_SENDTO ist so eine eierlegende Wollmilchsau. Das Ding kann (fast) alles: Mails verschicken, SMS oder MMS verschicken – und nutzt dafür die bereits auf dem Android Device installierten Tools. Permissions sind hierbei nicht notwendig, ja sogar kontraproduktiv.

https://developer.android.com/guide/components/intents-common#java

Im o.a. Beispiel öffnet sich zum Versenden der Standards SMS Handler des Android Gerätes, die SMS ist vordefiniert und muss noch per Tastendruck bestätigt werden. Versand und Archivierung erfolgen im Standard SMS Programm.

Relativ schnell wird klar, dass für unsere Anwendung die Variante2 unbrauchbar ist! Die SMS soll im Notfall sofort verschickt werden. Weitere Programme / Ansichten / Clicks sind kontraproduktiv und würden den Benutzer im Notfall nur weiter verwirren. Also können wir nur mit Variante1 gut arbeiten.

Google Play Store und die primären Handler

Doch fairerweise sei gesagt: beim Anmelden der App im Goggle Play Store kann es mit Variante1 noch ein paar Schwierigkeiten geben. Google hat Apps nicht so gerne, die quasi im lfd Betrieb direkt Telefon oder SMS verwenden und sich als Primäre Handler aufspielen, ohne dafür die notwendigen Unterstützungen zu bieten. Sie empfehlen Variante2 – SMS Versand über den vorhandenen Primary SMS Handler / über die bereits installierte SMS App – aber das bringt uns bei unserer Anwendung ja nicht zum Ziel. Also ist manchmal etwas Sonderaufwand notwendig, um Anlagen für kritische Apps auszfüllen, bevor ihr die Freigabe für den App Store bekommt.


Text und Entwurf. (c) AE SYSTEME Testcenter, Hans-J. Walter
Hans-J. Walter ist Programmierer für Windows DOT.NET und Android und als Senior Chef Entwickler bei AE SYSTEME www.terminal-systems.de in Burgdorf / Hannover tätig. hjw@terminal-systems.de

Für diese und alle nachfolgenden Seiten gilt ebenso der obligatorische Hinweis: Alle Angaben ohne Gewähr. Bilder und Codes zeigen Beispiele. Diese Beschreibung bezieht sich auf unsere Installation und stellt keine Bewertung der verwendeten Techniken da. Fehler und Irrtümer vorbehalten!