App gestartet

Android Notification Bar Tutorial

Im zweiten Teil des Tutorials wollen wir Notifications erstellen, die in der Android Notification Bar des Nutzers auftauchen. Wir gehen dabei auch auf Ongoing Notifications ein, die einen gerade ablaufenden Vorgang anzeigen.

 

Neues Projekt anlegen

Als erstes erstellen wir in Eclipse ein neues Android-Projekt mit einer Activity.

Neues Android Projekt anlegen

 Layout definieren

Als nächstes fügen wir unserem Layout (main.xml) drei Buttons hinzu. Diese beschriften wir mit Notification1, Notification2 und Cancel. Das Ganze sollte dann so aussehen.

Layout (main.xml)

NotificationActivity anpassen

Da wir zwei verschiedene Notifications anzeigen wollen, brauchen wir als Erstes zwei ID-Konstanten in der NotificationActivity.

private final int ID_NOT1 = 0;
private final int ID_NOT2 = 1;

Ausserdem brauchen wir eine Referenz auf einen NotificationManager.

NotificationManager notMan;

In der OnCreate Methode fügen wir jetzt die Initialisierung des NotificationManagers ein. Dieser ist ein Systemservice und kann einfach mit

notMan = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

referenziert werden.

Den Aufruf der Notifications kapseln wir in eine eigene Methode showNotification mit Parametern für den Text, die ID und um welche Art es sich handelt.

private void showNotification(String text, boolean ongoing, int id)

In dieser Erstellen wir als erstes ein Notification Objekt.

Notification notification = new Notification(android.R.drawable.stat_notify_sync, text,System.currentTimeMillis());

Als Icon habe ich hier eins aus dem SDK gewählt. Des weiteren wird der Text übergeben und der Zeitpunkt gesetzt.

Die Steuerung der Art wie die Notification dargestellt wird, geschieht über das Feld Flags. Um zwischen einer normalen Notification und einer Ongoing Notification (Activitäten die noch andauern) zu unterscheiden, setzen wir das Flags Feld entsprechend.

if (ongoing) {
notification.flags = Notification.FLAG_ONGOING_EVENT;
} else {
notification.flags = Notification.FLAG_AUTO_CANCEL;
}

Als nächstes müssen wir definieren, wie die Notification aussieht und was passieren soll, wenn die Notification vom Nutzer angeklickt wird. Hierzu erstellen wir einen PendingIntent der einfach unsere Activity aufruft.

PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0,
new Intent(getApplicationContext(),NotificationActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(this, “NotificationActivity”, text, contentIntent);

Am Ende muss nur noch über den NotificationManager die Notification ausgelöst werden.

notMan.notify(id, notification);

Somit haben wir jetzt eine Methode die Notifications anzeigen kann. Jetzt fügen wir im OnCreate Ereignis noch die OnClickListener für unsere Buttons ein. Notification1 zeigt eine normale Notification und Notification2 zeigt eine Ongoing Notification. Mit dem Cancel button kann diese dann wieder beendet werden.

findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNotification(“Wichtige Info für den Nutzer…”,false,ID_NOT1);
}
});
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showNotification(“Hier passiert grade was…”,true,ID_NOT2);
}
});
findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notMan.cancel(ID_NOT2);
}
});

Wenn wir nun die App starten, sieht das ganze wie folgt aus:

App gestartet

Erste Notification

Zweite Notification

Benachrichtigungsleiste

LED ansteuern

Ich hatte eingangs erwähnt, dass man über das Flags Feld einiges steuern kann. Ein Beispiel dafür ist das Flashen der LED (sofern man denn eine am Gerät hat). Um das zu erreichen muss der Code in der showNotification Methode ein wenig angepasst werden. Wir fügen durch bitweises oder eine neue Konstante hinzu und setzen die Werte für die Ein- und Ausschaltzeit der LED.

notification.flags |= Notification.FLAG_SHOW_LIGHTS;

notification.ledOnMS=2000;

notification.ledOffMS=1000;

 

Nun wird beim Anzeigen der Notification die LED aufleuchten.

Manifest anpassen

Um zu verhindern, dass jedes Mal eine Neue Instanz der Activity gestartet wird, muss im Manifest noch der Paramter Launch Mode auf singleTop gesetzt werden. Dann wird immer die gerade geöffnete Instanz aufgerufen.

Android Manifest

 

Quellcode

Den gesamten Quellcode für dieses könnt ihr hier herunterladen.

Android Notification Bar Tutorial (zip)

 

 

8 Gedanken zu „Android Notification Bar Tutorial

  1. DanDan

    Bei den anderen Tutorials konnte ich dir noch folgen, aber dieses ist nicht Anfänger freundlich beschrieben ; )
    Es werden in Ecplise nur Fehler angezeigt.

    1. Daniel

      Lad dir sonst mal den Quellcode für das Tutorial herunter. Wenn es dann immer noch Probleme gibt, schreib uns deine Fehler.

      MfG Daniel

      1. Jan

        Als erstes kam der Fehler, dass android.app.NotificationMananger nicht bekannt ist. Im Gegensatz zu den anderen Tuts bietet eclipse an dieser Stelle nicht den automatischen Import an…

        Dann ist hier das Finden der Buttons und die OnClick-Anweisungen anders als bei den bisherigen Tuts, leider ohne Erklärung.

        Und auch ist aus dem Text nicht immer klar ersichtlich an welcher Stelle der Code eingesetzt werden soll.

        Nicht nur für Anfänger etwas verwirrend…

        1. Tjommel

          Geht mir genauso.
          Die bisherigen Tuturials waren sehr einfach und schön gehalten. Bei diesem hier verliert man ab dem 3ten Codeschnipsel den überblick was jetzt wo hin soll. Leider nicht schön :( .

          1. Daniel

            Ich gebe zu, dass das Tutorial ein wenig anspruchsvoller ist als die anderen. Daher würde ich vorschlagen, dass Ihr euch den Quellcode zum Tutorial herunterladet und euch den nochmal genau anschaut. Ich werde mal gucken ob ich das Tutorial nochmal ein wenig anpassen werde.

            MfG Daniel

  2. malger

    Hallo
    Vielen Dank erst mal für das gute Tutorial ;)

    Aber wäre es nicht besser die Notification in einem Service laufen zu lassen, da sie sonst nur für eine Activity funktioniert?

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>