Meine App generiert eine Benachrichtigung, aber das Symbol, das ich für diese Benachrichtigung festgelegt habe, wird nicht angezeigt. Stattdessen bekomme ich ein weißes Quadrat.
Ich habe versucht, die Größe des PNG des Symbols zu ändern (Abmessungen 720 x 720, 66 x 66, 44 x 44, 22 x 22). Seltsamerweise ist bei Verwendung kleinerer Dimensionen das weiße Quadrat kleiner.
Ich habe dieses Problem sowie die korrekte Art der Generierung von Benachrichtigungen gegoogelt und nach dem, was ich gelesen habe, sollte mein Code korrekt sein. Leider sind die Dinge nicht so, wie sie sein sollten.
Mein Handy ist ein Nexus 5 mit Android 5.1.1. Das Problem tritt auch bei Emulatoren auf, einem Samsung Galaxy s4 mit Android 5.0.1 und einem Motorola Moto G mit Android 5.0.1 (beide habe ich ausgeliehen und habe sie momentan nicht).
Es folgt der Code für Benachrichtigungen und zwei Screenshots. Wenn Sie weitere Informationen benötigen, können Sie diese gerne anfordern.
Danke euch allen.
@SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
resultIntent.putExtras(bundle);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
Notification notification;
Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
notification = new Notification.Builder(this)
.setSmallIcon(R.drawable.lg_logo)
.setContentTitle(title)
.setStyle(new Notification.BigTextStyle().bigText(msg))
.setAutoCancel(true)
.setContentText(msg)
.setContentIntent(contentIntent)
.setSound(sound)
.build();
notificationManager.notify(0, notification);
}
quelle
Antworten:
Ursache: Für 5.0 Lollipop "Benachrichtigungssymbole müssen vollständig weiß sein".
Lösung für Ziel Sdk 21
Wenn Sie Lollipop-Materialsymbole unterstützen möchten, erstellen Sie transparente Symbole für Lollipop und eine höhere Version. Weitere Informationen finden Sie unter: https://design.google.com/icons/
Bitte schauen Sie unter http://developer.android.com/design/style/iconography.html nach , und wir werden sehen, dass Benachrichtigungen im weißen Stil in Android Lollipop angezeigt werden sollen.
In Lollipop schlägt Google außerdem vor, eine Farbe zu verwenden, die hinter dem weißen Benachrichtigungssymbol angezeigt wird. Siehe Link: https://developer.android.com/about/versions/android-5.0-changes.html
Wo immer wir Farben hinzufügen möchten https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)
Die Implementierung von Notification Builder für Lollipop OS-Versionen unter und über LOLipop OS wäre:
Hinweis: setColor ist nur in Lollipop verfügbar und wirkt sich nur auf den Hintergrund des Symbols aus.
Es wird Ihr Problem vollständig lösen !!
quelle
Wenn Sie Google Cloud Messaging verwenden, wird dieses Problem nicht durch einfaches Ändern Ihres Symbols behoben . Dies funktioniert beispielsweise nicht:
Auch wenn ic_notification transparent und weiß ist. Es muss auch in den Manifest-Metadaten wie folgt definiert werden:
Metadaten werden als
application
Referenz unter das Tag gestellt.quelle
res/drawable/ic_notification.png
der Größe 196x196?Meta-data
Tag-Vorschlag positiv bewertet .Ich empfehle wirklich, die Designrichtlinien von Google zu befolgen :
Darin heißt es: "Benachrichtigungssymbole müssen vollständig weiß sein."
quelle
Deklarieren Sie diesen Code in Android Manifest:
Ich hoffe das ist nützlich für dich.
quelle
ic_stat_name
? Ist es ein PNG? sind es viele? bitte helfen!Wir können wie folgt vorgehen:
Erstellen Sie ein neues Objekt des Benachrichtigungserstellers und rufen Sie es auf
setSmallIcon()
mit dem Benachrichtigungs-Generator-Objekt wie im folgenden Code auf.Erstellen Sie eine Methode, mit der wir überprüfen, auf welcher Betriebssystemversion wir unsere App installieren. Wenn es sich unter Lolipop befindet, dh API 21, wird das normale App-Symbol mit Hintergrundfarbe verwendet, andernfalls wird das transparente App-Symbol ohne Hintergrund verwendet. Daher stellen die Geräte, die os version> = 21 verwenden, die Hintergrundfarbe des Symbols mithilfe der Methode ein
setColor()
der Benachrichtigungs-Builder-Klasse fest.Beispielcode:
quelle
setColor
auf Kitkat (API 19) und IceCreamSandwich (API 15) getestet. In beiden Fällen wurde die Farbe ignoriert, aber nicht abgestürzt . Kann ich die Überprüfung der Betriebssystemversion sicher unterlassen?Fügen Sie diese Zeile in die Datei manifest.xml im Anwendungsblock ein
quelle
Versuche dies
Ich hatte das gleiche Problem, ich habe viele Antworten ausprobiert, aber keine Lösungen gefunden. Schließlich habe ich den Weg gefunden, mein Problem zu lösen.
- Benachrichtigungssymbol mit transparentem Hintergrund erstellen. Die Breite und Höhe der App muss den folgenden Größen entsprechen und alle diese in Ihr Projekt-> App-> src-> main-> res einfügen
MDPI 24 * 24
HDPI 36 * 36
XHDPI 48 * 48
XXHDPI 72 * 72
Fügen Sie nach dem obigen die folgende Zeile in Ihre onMessageReceived-Methode ein
Vergessen Sie nicht, diesen Code in die Manifestdatei einzufügen
quelle
(Android Studio 3.5) Wenn Sie eine aktuelle Version von Android Studio sind, können Sie Ihre Benachrichtigungsbilder generieren. Klicken Sie mit der rechten Maustaste auf Ihren Res-Ordner > Neu> Image Asset . Anschließend wird Configure Image Assets angezeigt ( siehe Abbildung unten). Ändern Sie den Symboltyp in Benachrichtigungssymbole . Ihre Bilder müssen weiß und transparent sein. Diese Option "Image Assets konfigurieren" erzwingt diese Regel. Wichtig: Wenn Sie möchten, dass die Symbole für Cloud- / Push-Benachrichtigungen verwendet werden, müssen Sie die Metadaten unter Ihrem Anwendungs-Tag hinzufügen, um die neu erstellten Benachrichtigungssymbole zu verwenden.
quelle
Wenn Sie ein Benachrichtigungssymbol für die Lollipop-Unterstützung bereitstellen möchten, erstellen Sie zwei Benachrichtigungssymbole:
Setzen Sie nun das entsprechende Symbol zur Laufzeit basierend auf der Betriebssystemversion auf den Benachrichtigungs-Builder:
quelle
Endlich habe ich die Lösung für dieses Problem.
Dieses Problem tritt nur auf, wenn die App überhaupt nicht ausgeführt wird. (weder im Hintergrund noch im Vordergrund) . Wenn die App entweder im Vordergrund oder im Hintergrund ausgeführt wird, wird das Benachrichtigungssymbol ordnungsgemäß angezeigt (nicht das weiße Quadrat).
Wir müssen also die gleiche Konfiguration für das Benachrichtigungssymbol in Backend-APIs festlegen wie in Frontend.
Im Frontend haben wir React Native verwendet und für die Push-Benachrichtigung haben wir das Paket react-native-fcm npm verwendet .
Wir haben das Paket fcm-push npm mit Node.js als Backend für die Push-Benachrichtigung verwendet und die Nutzlaststruktur wie folgt festgelegt.
Was es im Grunde nach dem Benachrichtigungsbild sucht, das lokal in unserem Android-System gespeichert ist.
quelle
Benachrichtigungen sind Graustufen, wie unten erläutert. Sie sind nicht schwarz-weiß, trotz dessen, was andere geschrieben haben. Sie haben wahrscheinlich Symbole mit mehreren Schattierungen gesehen, z. B. Balken für die Netzwerkstärke.
Vor API 21 (Lollipop 5.0) funktionieren Farbsymbole. Sie können Ihre Anwendung auf die Ziel-API 20 zwingen, dies schränkt jedoch die für Ihre Anwendung verfügbaren Funktionen ein, sodass dies nicht empfohlen wird. Sie können die laufende API-Ebene testen und entweder ein Farbsymbol oder ein Graustufensymbol entsprechend festlegen. Dies ist jedoch wahrscheinlich nicht sinnvoll. In den meisten Fällen ist es am besten, ein Graustufensymbol zu verwenden.
Bilder haben vier Kanäle, RGBA (rot / grün / blau / alpha). Bei Benachrichtigungssymbolen ignoriert Android die Kanäle R, G und B. Der einzige Kanal, der zählt, ist Alpha, auch als Deckkraft bekannt. Entwerfen Sie Ihr Symbol mit einem Editor, mit dem Sie den Alpha-Wert Ihrer Zeichnungsfarben steuern können.
Wie Alpha-Werte ein Graustufenbild erzeugen:
Ändern mit
setColor
:Rufen Sie an
NotificationCompat.Builder.setColor(int argb)
. Aus der Dokumentation fürNotification.color
:Meine Tests mit setColor zeigen, dass Alpha-Komponenten nicht ignoriert werden. Höhere Alpha-Werte färben ein Pixel weiß. Niedrigere Alpha-Werte ändern ein Pixel in die Hintergrundfarbe (auf meinem Gerät schwarz) im Benachrichtigungsbereich oder in die angegebene Farbe in der Pulldown-Benachrichtigung.
quelle
Ich habe das Problem gelöst, indem ich den folgenden Code zum Manifest hinzugefügt habe:
wo
ic_stat_name
in Android Studio erstellt Klicken Sie mit der rechten Maustaste auf res >> Neu >> Image Assets >> IconType (Benachrichtigung)Und noch ein Schritt, den ich auf der Server-PHP-Seite mit Benachrichtigungsnutzdaten machen muss
Beachten Sie den Abschnitt
Der Name des Symbols
"icon" => "ic_stat_name"
sollte im Manifest identisch sein.quelle
Voraussetzungen zur Behebung dieses Problems:
Bildformat: 32-Bit-PNG (mit Alpha)
Das Bild sollte transparent sein
Transparenz Farbindex: Weiß (FFFFFF)
Quelle: http://gr1350.blogspot.com/2017/01/problem-with-setsmallicon.html
quelle
Ich habe einen Link gefunden, über den wir unser eigenes weißes Symbol generieren können.
Öffnen Sie diesen Link und laden Sie Ihren ic_launcher oder Ihr Benachrichtigungssymbol hoch
quelle
Sie können verschiedene Symbole für verschiedene Versionen verwenden. Stellen Sie einfach die Logik auf Ihr Symbol wie folgt ein:
quelle
Für SDK> = 23 fügen Sie bitte setLargeIcon hinzu
quelle
Um SDK-spezifische Versionen zu reduzieren, können Sie einfach Folgendes tun: ('#' durch '0x' ersetzen)
quelle
0xFF169AB9
fehlt Ihnen der vollständig undurchsichtige Alpha-Kanal.Wenn Sie ein farbenfrohes Symbol behalten möchten - Problemumgehung
Fügen Sie dem Symbol Pixel mit etwas anderer Farbe hinzu.
In meinem Fall habe ich ein schwarzes Symbol mit Schatten und Licht. Wenn dunkelblaue Pixel hinzugefügt werden, funktioniert es.
quelle
Ich habe ein ähnliches Problem auf Android 8.0. Versuchen Sie, die Ressource WEISSE Symbole zu verwenden. Ich habe ein weißes Quadrat, wenn ich versuche, ein farbiges Bild als Symbol zu verwenden. Wenn ich es durch ein weißes Symbol ersetze, beginnt die Arbeit.
quelle