Nach dem Upgrade meines Projekts auf Android O.
buildToolsVersion "26.0.1"
Lint in Android Studio zeigt eine veraltete Warnung für die folgende Benachrichtigungs-Builder-Methode an:
new NotificationCompat.Builder(context)
Das Problem ist: Android-Entwickler aktualisieren ihre Dokumentation, in der NotificationChannel beschrieben wird , um Benachrichtigungen in Android O zu unterstützen, und stellen uns ein Snippet mit derselben veralteten Warnung zur Verfügung:
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
Meine Frage: Gibt es eine andere Lösung für die Erstellung von Benachrichtigungen und die Unterstützung von Android O?
Eine Lösung, die ich gefunden habe, besteht darin, die Kanal-ID als Parameter im Notification.Builder-Konstruktor zu übergeben. Diese Lösung ist jedoch nicht gerade wiederverwendbar.
new Notification.Builder(MainActivity.this, "channel_id")
android
notifications
android-notifications
GuilhermeFGL
quelle
quelle
notificationBuild.setChannelId("channel_id")
. In meinem Fall ist diese letzte Lösung wiederverwendbarer, da meineNotificationCompat.Builder
in einigen Methoden wiederverwendet wird, wodurch Parameter für Symbole, Sounds und Vibrationen gespeichert werden.Antworten:
In der Dokumentation wird erwähnt, dass die Builder-Methode
NotificationCompat.Builder(Context context)
veraltet ist. Und wir müssen den Konstruktor verwenden, der denchannelId
Parameter hat:NotificationCompat.Builder-Dokumentation:
Notification.Builder-Dokumentation:
Wenn Sie die Builder-Setter wiederverwenden möchten, können Sie den Builder mit erstellen
channelId
und diesen Builder an eine Hilfsmethode übergeben und Ihre bevorzugten Einstellungen in dieser Methode festlegen.quelle
Notification.Builder(context)
Lösung in der NotificationChannel-Sitzung veröffentlichen. Aber gut, zumindest haben Sie einen Beitrag gefunden, der diese Abwertung meldet =)NotificationCompat.Builder(Context context)
den Kanal auch weiterhin verwenden und dann wiebuilder.setChannelId(String channelId)
Hier ist Arbeitscode für alle Android-Versionen ab API LEVEL 26+ mit Abwärtskompatibilität.
quelle
.setPriority(Notification.PRIORITY_MAX)
andernfalls verwenden Sie aktualisierten Code für 26 API. `Rufen Sie den 2-Argumente-Konstruktor auf: Rufen Sie zur Kompatibilität mit Android O support-v4 auf
NotificationCompat.Builder(Context context, String channelId)
. Wenn Sie mit Android N oder früher arbeiten,channelId
wird dies ignoriert. Wenn Sie mit Android O arbeiten, erstellen Sie auch einNotificationChannel
mit demselbenchannelId
.Beispielcode für veraltete Zeit: Der Beispielcode auf mehreren JavaDoc-Seiten, z. B. Notification.Builder ,
new Notification.Builder(mContext)
ist veraltet.Veraltete Konstruktoren:
Notification.Builder(Context context)
und v4NotificationCompat.Builder(Context context)
sind zugunsten von veraltetNotification[Compat].Builder(Context context, String channelId)
. (Siehe Notification.Builder (android.content.Context) und v4 NotificationCompat.Builder (Kontextkontext ) .)Veraltete Klasse: Die gesamte Klasse v7
NotificationCompat.Builder
ist veraltet. (Siehe v7 NotificationCompat.Builder .) Bisher wurde v7NotificationCompat.Builder
zur Unterstützung benötigtNotificationCompat.MediaStyle
. In Android O gibt es eine v4NotificationCompat.MediaStyle
in der Medien-compat Bibliothek ‚s -android.support.v4.media
Paket. Verwenden Sie diese, wenn Sie brauchenMediaStyle
.API 14+: In der Support Library ab 26.0.0 unterstützen die Pakete support-v4 und support-v7 beide eine Mindest-API-Stufe von 14. Die v # -Namen sind historisch.
Siehe Aktuelle Revisionen der Support-Bibliothek .
quelle
Anstatt nach zu suchen
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
so vielen Antworten zu suchen, gibt es einen etwas einfacheren Weg -Fügen Sie dem
application
Abschnitt der Datei AndroidManifest.xml die folgende Zeile hinzu, wie im Dokument Einrichten einer Firebase Cloud Messaging-Client-App unter Android erläutert :Fügen Sie dann der Datei values / strings.xml eine Zeile mit einem Kanalnamen hinzu :
Danach können Sie die neue Version des NotificationCompat.Builder- Konstruktors mit 2 Parametern verwenden (da der alte Konstruktor mit 1 Parameter in Android Oreo veraltet ist):
quelle
Hier ist der Beispielcode, der in Android Oreo und weniger als Oreo funktioniert.
quelle
Einfache Probe
quelle
Der richtige Code lautet:
mit Abhängigkeit 26.0.1 und neuen aktualisierten Abhängigkeiten wie 28.0.0.
Einige Benutzer verwenden diesen Code in folgender Form:
Logik ist also die Methode, die Sie deklarieren oder initiieren, dann wird dieselbe Methode auf der rechten Seite für die Zuordnung verwendet. Wenn Sie auf der linken Seite von = eine Methode verwenden, wird dieselbe Methode auf der rechten Seite von = für die Zuordnung mit neu verwendet.
Versuchen Sie diesen Code ... Es wird sicher funktionieren
quelle
Dieser Konstruktor war in API-Level 26.1.0 veraltet. Verwenden Sie stattdessen NotificationCompat.Builder (Context, String). Alle veröffentlichten Benachrichtigungen müssen eine NotificationChannel-ID angeben.
quelle
quelle