Apps für Android programmieren leicht gemacht!
Benachrichtigung - Android

Benachrichtigungen

Benachrichtigungen, auch Notification genannt, sind diese teils nervigen Nachrichten auf eurem Handy, die auch einen Icon oben in die Leiste setzen.
Benachrichtigungen sind also die Nachrichten, welche sich in der herunterziehbaren Leiste bei Android verstecken und Text, Icon genau so wie Button enthalten können.

In diesem Artikel wollen wir uns gerne einmal damit beschäftigen, diese Benachrichtigungen selber zu programmieren. Wir nehmen an ein Spiel programmiert zu haben, der Bau eines Gebäudes wurde initialisiert und die App geschlossen. Nun ist der Bau des Gebäudes fertig und wir wollen den Spieler darüber informieren.
Was machen wir nun? Warten? Nein, wir zeigen eine Benachrichtigung an und locken den Spieler zurück. (Übrigens sehr wertvolles Element im Spiel Clash of Clans)

Wir schreiben nun eine Funktion welcher wir einen Text und den momentanen Kontext übergeben und die uns eine Benachrichtigung, mit Icon, in die Statusleiste setzt. Wir nennen sie Notifi.

public void Notifi(Context context, String Nachricht){

   //Hier soll eine Benachrichtigung raus

}

 

Nun wo wir eine Grundfunktion haben müssen wir sie mit dem eigentlichen Code füttern, die die Arbeit erledigt.
Wir rufen die Klasse NotificationCompat auf.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);

 

Anschließend müssen wir NotificationCompat noch Text geben, einen Icon setzen und einen Titel geben. Mehr benötigen wir in der Theorie nicht.
Gesagt getan:

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("App XY")
                        .setContentText(Nachricht);

 

Als Icon wird nun die Datei ic_launcher.png aus dem Order Drawables benutzt.
Normalerweise beinhaltet diese Datei den grünen Android als Bild.
Solltet ihr einen anderen Icon nutzen wollen müsst ihr lediglich ein Bild in den Ordner „res/drawables“ verschieben und „ic_launcher“ durch den neuen Dateinamen ersetzen.

Nun müssen wir die erstellte Benachrichtigung noch an das Android Betriebssystem übergeben, damit sie auch angezeigt wird, die geschieht über folgende Funktion:

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(666, mBuilder.build());

 

Die 666 in der letzten Zeile sollte übrigens durch die ID der jeweiligen Benachrichtigung ersetzt werden. Bei einem Klick auf diese könnte man die ID wieder auslesen und/oder sie per App wieder entfernen.

Alles zusammen würde dann folgendermaßen aussehen:

//Aufruf über folgende Funktion:
Notifi(this, "Dies ist eine Textbenachrichtigung");

//Die gesamte Funktion:
public void Notifi(Context context, String Nachricht){

       NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("App XY")
                        .setContentText(Nachricht);
        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(666, mBuilder.build());

}

Dauerhafte Benachrichtigung:

Übrigens ist es auch möglich eine Benachrichtigung dauerhaft an die Statusleiste zu „kleben“.
Das Ganze nennt sich dann „OnGoing“, was übersetzt so viel wie fortlaufend bedeutet.

Wie folgt wird onGoing gesetzt:

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("App XY")

                        .setOngoing(true) //HIER WIRD OnGoing HINZUGEFÜGT

                        .setContentText(Nachricht);

 

App bei Klick öffnen:

Eine Nachricht ohne weitere Aktion wäre etwas witzlos.
Die Funktion Notifi würde wie folgt aussehen, wenn sie bei Klick die eigene App aufruft:

public void Notifi(Context context, String Nachricht){

        //Es wird die Klasse Main.class beim Klick aufgerufen
        final Intent notificationIntent = new Intent(context, Main.class);
        final PendingIntent pi = PendingIntent.getActivity(context, 0, notificationIntent, 0);

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("App XY")
                        .setOngoing(true)
                        .setContentIntent(pi)
                        .setContentText(Nachricht);
        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(666, mBuilder.build());
}

Es wird die Klasse Main.class beim Klick aufgerufen.
Wenn eine andere Klasse aufgerufen werden soll muss die Stelle „Main.class“ geändert werden.
Der Suffix „.class“ muss bestehen bleiben.
Die Aufzurufende Klasse muss auch als Startklasse aufrufbar sein, also zb. die Funktion „onCreate“ enthalten.
Zur Not die in Manifest.xml angegebene Klasse angeben.

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.

6 Kommentare

*Pflichtfeld

  • Hallo, ich würde gerne eine kleine App programmieren, die mir Webseiten anzeigt (wie die Facebook APP und Co.).
    Das selbst ist keine große Sache, nur würde ich auch gern Benachrichtigungen in der Statusleiste einbinden, so wie sie auch auf der Webseite zu finden sind. (Wieder wie im Beispiel von Facebook, wenn z.B. eine neue Freundschaftsanfrage vorhanden ist). Ich habe aber keine Ahnung, wie die Benachrichtigung aus der Seite ausgelesen werden kann… Könnten Sie mir dabei vielleicht helfen?

    LG

    • Hallo Blackbook,

      deine App müsste sich den Quellcode der angezeigten Webseite holen und dann auf beispielsweise einen HTML-Tag prüfen. Wenn wir mal bei Facebook bleiben, dann wird ja bei einer Benachrichtigung so ein kleiner roter Kreis mit einer Zahl angezeigt. Dieser Kreis hat ein bestimmtes Class-Attribut unter HTML. Du könntest also einfach prüfen, ob es einen HTML-Tag mit beispielsweise dem Class-Attribut „notification-circle“ (frei erfundenes Beispiel) gibt. Damit weißt du ob es eine Benachrichtigung gibt oder nicht. Dann kannst du wiederum einen HTML-Tag auslesen, in dem der Text der Benachrichtigung steht.

      Das Ganze sollte zwar funktionieren, ABER ist nur ein Workaround. Im Falle von Facebook solltest du auf die Facebook Android API zurückgreifen.
      Ich würde dir also dazu raten es über die API’s zu machen. Falls es keine gibt oder du dennoch wie oben beschrieben vorgehen willst, dann würde ich dir zum Analysieren des HTML-Quellcodes zur Java Library JSoup raten. Ich helfe dir gerne weiter, nach Möglichkeit bitte im Forum, da das sonst den Rahmen der Kommentarfunktion sprengt.

      Gruß,
      Marvin

      • Hey, ich würde gerne eine App entwickeln, die immer neue Benachrichtigungen sendet, sobald neue Inhalte auf unserer Webseite verfügbar sind. Wie kann ich dieses Umsetzen?

        (App soll nicht mehr und nicht weniger können)

      • Hallo Ehek Retro,

        Ist es euch möglich auf der Webseite per PHP Curl-Befehle auszuführen?
        Wenn ja, dann schreibe ich euch gerne einen Artikel.

        Gruß,
        Marvin

  • Ja bitte bei mir das selbe wie bei Ehek Retro. PHP ist zumindest bei mir möglich und ich würde mich freuen wenn du einen Artikel dazu schreiben würdest oder schon hast.