webentwicklung-frage-antwort-db.com.de

Notification.Builder (Kontext) veraltet Android O

Notification.Builder (Kontext) wurde kürzlich wegen des Veranstaltungsortes der Benachrichtigungskanäle in Android O.

PROBLEM:

Nach der Verwendung von Notification.Builder(context, StringID) anstelle von Notification.Builder(context) habe ich eine Benachrichtigung an mein Android O-Gerät erhalten.
Nachdem ich dies jedoch auf einem Android 23 (M)) versucht hatte, erhielt ich keine Benachrichtigung. Ich habe meinen Code debuggt und die Ausführung wurde gestoppt, sobald der Debugger den Zeilenposten erreichte Notification.Builder (Kontext, StringID) auf Android 23 (M).

FIX:

Um dieses Problem zu beheben, habe ich if/else-Bedingung verwendet, um zwischen Android O-Geräten und den anderen Geräten zu trennen.

Ich habe den folgenden Codeausschnitt:

Notification.Builder notificationBuilder;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    notificationBuilder = new Notification.Builder(mContext,
            mContext.getResources().getString(R.string.notification_id_channel));
} else {
    notificationBuilder = new Notification.Builder(mContext);
}

Lint in Android Studio zeigt die folgende Verfallszeile an:

enter image description here

FRAGE:

Gibt es eine Möglichkeit, diese Verwerfungs-Warnlinie loszuwerden?

24
Red M

Ihre Lösung besteht darin, NotificationCompat.Builder(Context context, String channelId) zu verwenden. Wenn Sie dies verwenden, müssen Sie die API-Ebene nicht überprüfen, der Builder ignoriert die Kanal-ID auf Pre-Oreo-Geräten.

Ich habe es auf API 15, 22, 23 und 26 getestet und es funktioniert einwandfrei.

38
Wess

Sie müssen eine eindeutige channelId definieren (zum Beispiel "MyChannelId_01") und NotificationCompat.Builder (ctx, "MyChannelId_01") aufrufen. Die erstellte Benachrichtigung wird auf diesem NotificationChannel "MyChannelId_01" veröffentlicht.

Hier können Sie die Wichtigkeit der Benachrichtigung definieren (dies steuert, wie unterbrochene Benachrichtigungen an diesen Kanal gesendet werden. Der Wert ist IMPORTANCE_UNSPECIFIED, IMPORTANCE_NONE, IMPORTANCE_MIN, IMPORTANCE_LOW, IMPORTANCE_DEFAULT oder IMPORTANCE_HIGH.).

Ein Beispiel finden Sie hier: Benachrichtigungskanal erstellen

2
Christian

Ich hatte das gleiche Problem und da ich Android 22 und 24 als Ziel ausgewählt habe, habe ich Folgendes getan: NotificationCompat.Builder notification = new NotificationCompat.Builder (MainActivity.this, "")

Ich bin sicher, dass jemand sagen wird, dass dies ein Hack ist, aber die Warnung wird beseitigt und ich habe keine Probleme.

Die Übergabe einer leeren Zeichenfolge funktioniert anscheinend für <Android 26.

Vielleicht kann jemand anderes angeben, ob dies Probleme für 26 verursacht.

Vielen Dank

1
user3365935