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.
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());
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());
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());
}
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());
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.
Eine Benachrichtigung verfügt über 4 Haupteigenschaften (3 grundlegende Anzeigeeigenschaften + 1 Klick-Aktionseigenschaft)
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.
Benachrichtigungen werden durch den Aufruf der Methode notify () der NotificationManger-Klasse angezeigt
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.
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
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
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()
);
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);
}
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());
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());