web-dev-qa-db-de.com

Wie erstelle ich eine Benachrichtigung mit NotificationCompat.Builder?

Ich muss eine einfache Benachrichtigung erstellen, die in der Benachrichtigungsleiste zusammen mit dem Sound und dem Symbol angezeigt wird, sofern dies möglich ist. Ich brauche es auch, um mit Android 2.2 kompatibel zu sein. Daher habe ich festgestellt, dass NotificationCompat.Builder mit allen APIs über 4 funktioniert. Wenn es eine bessere Lösung gibt, können Sie es gerne erwähnen.

49
Vladimir

Der NotificationCompat.Builder ist der einfachste Weg, um Notifications unter allen Android-Versionen zu erstellen. Sie können sogar Funktionen verwenden, die mit Android 4.1 verfügbar sind. Wenn Ihre App auf Geräten mit Android> = 4.1 läuft, werden die neuen Funktionen verwendet. Wenn sie unter Android <4.1 ausgeführt werden, wird die Benachrichtigung eine einfache alte Benachrichtigung sein.

So erstellen Sie eine einfache Benachrichtigung (siehe Android API-Leitfaden zu Benachrichtigungen ):

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Hello World!")
    .setContentIntent(pendingIntent); //Required on Gingerbread and below

Sie müssen mindestens smallIcon, contentTitle und contentText einstellen. Wenn Sie einen vermissen, wird die Benachrichtigung nicht angezeigt.

Achtung: Bei Lebkuchen und darunter müssen Sie die Inhaltsabsicht festlegen, andernfalls wird eine IllegalArgumentException geworfen.

Um eine Absicht zu erstellen, die nichts bewirkt, verwenden Sie:

final Intent emptyIntent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Sie können über den Builder Sound hinzufügen, d. H. Einen Sound aus dem RingtoneManager:

mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))

Die Benachrichtigung wird über den NotificationManager zur Leiste hinzugefügt:

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(mId, mBuilder.build());
121
thaussma

Arbeitsbeispiel:

    Intent intent = new Intent(ctx, HomeActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder b = new NotificationCompat.Builder(ctx);

    b.setAutoCancel(true)
     .setDefaults(Notification.DEFAULT_ALL)
     .setWhen(System.currentTimeMillis())         
     .setSmallIcon(R.drawable.ic_launcher)
     .setTicker("Hearty365")            
     .setContentTitle("Default notification")
     .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
     .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
     .setContentIntent(contentIntent)
     .setContentInfo("Info");


    NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, b.build());
23
Sumoanand

Ich mache diese Methode und arbeite gut. (getestet in Android 6.0.1)

public void notifyThis(String title, String message) {
    NotificationCompat.Builder b = new NotificationCompat.Builder(this.context);
    b.setAutoCancel(true)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.favicon32)
            .setTicker("{your tiny message}")
            .setContentTitle(title)
            .setContentText(message)
            .setContentInfo("INFO");

    NotificationManager nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE);
    nm.notify(1, b.build());
}

Benachrichtigung in der Tiefe

CODE

Intent intent = new Intent(this, SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.your_notification_icon)
                        .setContentTitle("Notification Title")
                        .setContentText("Notification ")
                        .setContentIntent(pendingIntent );

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());

Tiefenwissen

Benachrichtigungen können mithilfe von Benachrichtigung erstellt werden. Builder- oder NotificationCompat.Builder-Klassen.
Wenn Sie Abwärtskompatibilität wünschen, sollten Sie die NotificationCompat.Builder-Klasse verwenden, da sie Teil der v4-Support-Bibliothek ist , da sie sich stark um das Abheben kümmert, um konsistentes Erscheinungsbild und Funktionalitäten der Benachrichtigung für API 4 und höher bereitzustellen. 

Kernbenachrichtigungseigenschaften

Eine Benachrichtigung verfügt über 4 Haupteigenschaften (3 grundlegende Anzeigeeigenschaften + 1 Klick-Aktionseigenschaft)

  • Kleines Symbol
  • Titel
  • Text
  • Schaltflächenklickereignis (Klickereignis, wenn Sie auf die Benachrichtigung tippen) 

Das Klickereignis für Schaltflächen ist ab Android 3.0 optional. Dies bedeutet, dass Sie Ihre Benachrichtigung nur mit Anzeigeeigenschaften erstellen können, wenn Ihre minSdk auf Android 3.0 oder höher zielt. Wenn Sie möchten, dass Ihre Benachrichtigung auf älteren Geräten als Android 3.0 ausgeführt wird, müssen Sie das Click-Ereignis angeben. Andernfalls wird IllegalArgumentException angezeigt. 

Benachrichtigungsanzeige

Benachrichtigungen werden durch den Aufruf der Methode notify () der NotificationManger-Klasse angezeigt 

parameter notify ()

Es gibt zwei Varianten für die Benachrichtigungsmethode 

notify(String tag, int id, Notification notification)

oder 

notify(int id, Notification notification)

die Benachrichtigungsmethode benötigt eine Ganzzahl-ID, um Ihre Benachrichtigung eindeutig zu identifizieren. Sie können jedoch auch ein optionales String-Tag angeben, um Ihre Benachrichtigung im Konfliktfall weiter zu identifizieren. 

Diese Art von Konflikt ist selten, aber Sie haben eine Bibliothek erstellt und andere Entwickler verwenden Ihre Bibliothek. Jetzt erstellen sie ihre eigenen Benachrichtigung und irgendwie Ihre Benachrichtigung und anderen dev Benachrichtigungs-ID ist gleich, dann werden Sie in Konflikt geraten.

Benachrichtigung nach API 11 (Mehr Kontrolle)

API 11 bietet zusätzliche Kontrolle über das Benachrichtigungsverhalten 

  • Benachrichtigung Entlassung
    Wenn ein Benutzer auf die Benachrichtigung tippt, führt er standardmäßig das zugewiesene Klickereignis aus, löscht jedoch die Benachrichtigung nicht. Wenn Sie möchten, dass Ihre Benachrichtigung gelöscht wird, sollten Sie dies hinzufügen 

    mBuilder.setAutoClear (true);

  • Verhindern, dass Benutzer die Benachrichtigung abweisen
    .__ Ein Benutzer kann die Benachrichtigung auch durch Wischen abweisen. Sie können dieses Standardverhalten deaktivieren, indem Sie dies beim Erstellen Ihrer Benachrichtigung hinzufügen 

    mBuilder.setOngoing (true);

  • Positionierung der Benachrichtigung
    Sie können die relative Priorität Ihrer Benachrichtigung festlegen, indem Sie 

    mBuilder.setOngoing (int pri);

Wenn Ihre App mit einer niedrigeren API als 11 ausgeführt wird, funktioniert Ihre Benachrichtigung ohne die oben genannten zusätzlichen Funktionen. Dies ist der Vorteil, wenn Sie NotificationCompat.Builder gegenüber Notification.Builder auswählen

Benachrichtigung nach API 16 (informativer)

Mit der Einführung von API 16 erhielten Benachrichtigungen viele neue Funktionen
Benachrichtigung kann so viel informativer sein.
Sie können Ihrem Logo ein bigPicture hinzufügen. Angenommen, Sie erhalten jetzt eine Nachricht von einer Person. Mit der Bitmap-Bitmap (Bitmap) können Sie das Foto dieser Person anzeigen. In der Statusleiste sehen Sie das Symbol, wenn Sie einen Bildlauf durchführen, und Sie sehen das Personenfoto anstelle des Symbols. Es gibt auch andere Funktionen 

  • Fügen Sie in der Benachrichtigung einen Zähler hinzu
  • Ticker-Nachricht, wenn Sie die Benachrichtigung zum ersten Mal sehen
  • Erweiterbare Benachrichtigung
  • Mehrzeilige Benachrichtigung und so weiter
2
Rohit Singh

einfache Möglichkeit für Benachrichtigungen

 NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher) //icon
            .setContentTitle("Test") //tittle
            .setAutoCancel(true)//swipe for delete
            .setContentText("Hello Hello"); //content
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(1, builder.build()
    );
1

Benachrichtigung in Android 8.0 anzeigen

@TargetApi(Build.VERSION_CODES.O)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)

  public void show_Notification(){

    Intent intent=new Intent(getApplicationContext(),MainActivity.class);
    String CHANNEL_ID="MYCHANNEL";
    NotificationChannel notificationChannel=new NotificationChannel(CHANNEL_ID,"name",NotificationManager.IMPORTANCE_LOW);
    PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),1,intent,0);
    Notification notification=new Notification.Builder(getApplicationContext(),CHANNEL_ID)
            .setContentText("Heading")
            .setContentTitle("subheading")
            .setContentIntent(pendingIntent)
            .addAction(Android.R.drawable.sym_action_chat,"Title",pendingIntent)
            .setChannelId(CHANNEL_ID)
            .setSmallIcon(Android.R.drawable.sym_action_chat)
            .build();

    NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);
    notificationManager.notify(1,notification);


}
1

Sie können diesen Code ausprobieren, das funktioniert gut für mich:

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

    Intent i = new Intent(noti.this, Xyz_activtiy.class);
    PendingIntent pendingIntent= PendingIntent.getActivity(this,0,i,0);

    mBuilder.setAutoCancel(true);
    mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
    mBuilder.setWhen(20000);
    mBuilder.setTicker("Ticker");
    mBuilder.setContentInfo("Info");
    mBuilder.setContentIntent(pendingIntent);
    mBuilder.setSmallIcon(R.drawable.home);
    mBuilder.setContentTitle("New notification title");
    mBuilder.setContentText("Notification text");
    mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

    NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(2,mBuilder.build());
1
Rohit Lalwani

Verwenden Sie diesen Code

            Intent intent = new Intent(getApplicationContext(), SomeActvity.class);
            PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),
                    (int) System.currentTimeMillis(), intent, 0);

            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(getApplicationContext())
                            .setSmallIcon(R.drawable.your_notification_icon)
                            .setContentTitle("Notification title")
                            .setContentText("Notification message!")
                            .setContentIntent(pIntent);

            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(0, mBuilder.build());