Das Benachrichtigungssymbol wird in Android 5 Lollipop weiß angezeigt



Answers

Stimme völlig mit Benutzer Daniel Saidi überein. Um Color für NotificationIcon zu haben, schreibe ich diese Antwort.

Dafür musst du ein Icon wie Silhouette machen und einen Bereich Transparent wo immer du deine Colors hinzufügen willst. dh,

Sie können Ihre Farbe mit hinzufügen

.setColor(your_color_resource_here)

setColor : setColor ist nur in Lollipop verfügbar, also müssen Sie OSVersion überprüfen

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    Notification notification = new Notification.Builder(context)
    ...
} else {
    // Lollipop specific setColor method goes here.
    Notification notification = new Notification.Builder(context)
    ...
    notification.setColor(your_color)
    ...            
}

Sie können dies auch mithilfe von Lollipop als Ziel- SDK .

Alle Anweisungen zu NotificationIcon den NotificationIcon der Google Developer Console .

Bevorzugte Benachrichtigungssymbolgröße 24x24dp

mdpi    @ 24.00dp   = 24.00px
hdpi    @ 24.00dp   = 36.00px
xhdpi   @ 24.00dp   = 48.00px

Weitere Informationen finden Sie in diesem Link unter Benachrichtigungssymbolgrößen .

Question

Ich habe eine App, die benutzerdefinierte Benachrichtigungen anzeigt. Das Problem ist, dass das kleine Symbol in der Benachrichtigungsleiste in Android 5 in weiß angezeigt wird. Wie kann ich das beheben?




mische diese beiden Dinge in App-Großbuchstaben

 defaultConfig {
    applicationId "com.example.abdulwahidvi.notificationproblem"
    minSdkVersion 16
    targetSdkVersion 26 <----------- default
    // my code
    targetSdkVersion 20 <--------- mine

    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}



Entferne das android:targetSdkVersion="21" aus der manifest.xml. es wird klappen! und von diesem gibt es überhaupt kein Problem in deiner APK, es ist nur ein Trick, den ich dieses anwende, und ich fand farbenfrohes Symbol in der Benachrichtigung




Ich hatte das gleiche Problem und es war wegen meiner App Benachrichtigungssymbol nicht flach. Für Android-Version Lollipop oder sogar unter Lollipop sollte Ihre App Benachrichtigungssymbol flach sein, verwenden Sie kein Symbol mit Schatten usw.

Unten ist der Code, der auf allen Android-Versionen einwandfrei funktionierte.

private void sendNotification(String msg) {

    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent intent = new Intent(this, CheckOutActivity.class);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(getString(R.string.app_name))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg).setLights(Color.GREEN, 300, 300)
            .setVibrate(new long[] { 100, 250 })
            .setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(true);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(new Random().nextInt(), mBuilder.build());
}

Falsches Symbol

Rechtes Symbol




Post android Lollipop release android hat die Richtlinien für die Anzeige von Benachrichtigungssymbolen in der Benachrichtigungsleiste geändert. In der offiziellen Dokumentation heißt es: "Aktualisieren oder Entfernen von Elementen mit Farbe. Das System ignoriert alle Nicht-Alphakanäle in Aktionssymbolen und im Hauptbenachrichtigungssymbol. Sie sollten davon ausgehen, dass diese Symbole nur Alpha-Symbole sind. Das System zeichnet Benachrichtigungssymbole in Weiß und Aktionssymbole in dunkelgrau. "Was das im Laien bedeutet, ist:" Konvertiere alle Teile des Bildes, die du nicht zeigen willst, in transparente Pixel. Alle Farben und nicht transparenten Pixel werden in Weiß angezeigt "

Sie können sehen, wie dies im Detail mit Screenshots hier https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/

Ich hoffe, das hilft




Um zu vermeiden, dass Benachrichtigungssymbole weiß werden, verwenden Sie "Silhouette" -Symbole für sie, dh. Weiß-auf-transparent Hintergrundbilder. Sie können Irfanview , um sie zu bauen:

  • Wählen Sie ein Bild, öffnen Sie in IrfanView , drücken Sie F12 für die Malwerkzeuge, reinigen Sie das Bild wenn nötig (entfernen Sie unerwünschte Teile, glätten und polieren)
  • Image / Decrease Color Depth auf 2 Image / Decrease Color Depth (für ein Schwarzweißbild)
  • Image / Negative (für ein Weiß auf schwarzem Bild)
  • Image / Resize/Resample auf 144 x 144 (Größe verwenden Methode "Resize" nicht "Resampling", sonst wird das Bild wieder auf 24 Farbbits pro Pixel (24 BPP) erhöht
  • File / Save as PNG , aktivieren Show option dialog , aktivieren Save Transparent Color Show option dialog Save Transparent Color Save , klicken Sie auf Save und dann auf die schwarze Farbe im Bild, um die transparente Farbe festzulegen

Android scheint nur die Zeichenauflösung xxhdpi (144 x 144) zu verwenden. Kopieren Sie daher die resultierende ic_notification.png Datei nach \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi . Verwenden Sie .setSmallIcon(R.drawable.ic_notification) in Ihrem Code oder verwenden Sie getNotificationIcon() wie oben von Daniel Saidi vorgeschlagen.

Sie können auch Roman Nuriks Android Asset Studio verwenden .




Ich habe auch zu viele Probleme damit konfrontiert, aber nach der Suche im ganzen Internet fand ich verschiedene Lösungen für dieses Problem. Lassen Sie mich zusammenfassen alle Lösungen und erklären:

Hinweis: Diese Lösung ist für Phonegap cordova-Benutzer gedacht

  1. Example

<preference name="android-targetSdkVersion" value="20"/>

Sie müssen Ihren android-targetSdkVersion-Wert auf weniger als 21 einstellen. Nach der Einstellung dieses Werts wird das Benachrichtigungssymbol bis Android 6 (Marshmallow) angezeigt. Es funktioniert nicht unter Android 7 (Nougat). Diese Lösung hat für mich funktioniert.

  1. Ändern Sie den statusbarStyle in Ihrer Konfigurationsdatei. Example

<preference name="StatusBarStyle" value="lightcontent" />

Aber diese Lösung funktioniert nur, wenn Ihre App geöffnet ist. Also, ich denke, diese Lösung ist nicht die beste Lösung, aber sie hat für viele Benutzer funktioniert.

  1. Machen Sie Ihr Symbol transparent. Diese Lösung hat für viele Menschen funktioniert. Eigentlich ist die Sache, in der Entwicklung von Native Anwendung müssen wir ihnen drei Bilder zur Verfügung stellen: (a) App-Symbol (b) Benachrichtigungssymbol (c) Statusleiste Symbolbild, aber im Falle der hybriden Entwicklung mobiler Anwendungen gibt es keine Option zu tun Sie dies. Also machen Sie Ihr Icon transparent und diese Lösung wird Ihr Problem lösen.

Und ich bin sicher, dass eine der oben genannten Lösungen für Ihr Problem funktioniert.




Gemäß den Designrichtlinien für Android müssen Sie eine Silhouette für builder.setSmallIcon(R.drawable.some_notification_icon); Aber wenn Sie immer noch ein farbenfrohes Icon als Benachrichtigungssymbol zeigen möchten, ist hier der Trick für Lollipop und oben unter Code zu verwenden. Der largeIcon fungiert als primäres Benachrichtigungssymbol und Sie müssen auch eine Silhouette für smallIcon bereitstellen, da diese unten rechts auf der largeIcon angezeigt wird.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
     builder.setColor(context.getResources().getColor(R.color.red));
     builder.setSmallIcon(R.drawable.some_notification_icon);
     builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
}

Und Pre-Lollipop verwenden nur .setSmallIcon(R.mipmap.ic_launcher) mit Ihrem Builder.




Links