6

Wenn ich den Code mNotificationBuilder.setLargeIcon(BitmapFactory.decodeResource( getResources(), R.drawable.ic_large_icon)); zu meiner Benachrichtigung hinzufüge, funktioniert es ohne Fehler oder Warnungen. Dies passiert nur auf Pre-Lollipop, auf Lollipop und darüber hinaus funktioniert es großartig. Und mit "funktioniert" meine ich, dass die Benachrichtigung angezeigt wird.NotificationCompat.Builder setLargeIcon() funktioniert nicht?

Mein Beispielcode:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 

mBuilder.setSmallIcon(R.drawable.icon); 
mBuilder.setContentTitle("Content Title"); 
mBuilder.setContentText("Content Text"); 
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_large_icon)); 

startForeground(1, mBuilder.build()); 

Ich habe versucht, die Bitmap auf unterschiedliche Weise zu laden, aber es hält versagt ... Das Symbol 128x128 ist, so dass die Größe der es kein Problem sein sollte?

Ich habe auch verschiedene IDs ausprobiert, aber keine, die das Problem lösen.

Ich wäre so dankbar für jeden Rat, bitte jeden Stoß in die richtige Richtung würde die Welt für mich bedeuten.

EDIT 1 #

Diese Benachrichtigung von einem Dienst erteilt wird. Der Dienst ist am Leben und Logprints sagen mir, dass der Code nach "startForeground()" ausgeführt wird.

+0

"Das Symbol ist 128x128, so dass die Größe der es sollte kein Problem sein?" - In welchem ​​Verzeichnis (oder in welchen Verzeichnissen) haben Sie dieses Symbol? – CommonsWare

+0

Res/Drawable, auch versucht, das Android Asset Studio (von Roman) zu verwenden, um mehrere Auflösungen in die verschiedenen Unterverzeichnisse zu setzen. Aber es hat auch nicht geholfen. Gibt es eine Möglichkeit, dass es wichtig ist, wo es hingelegt wird? Gehen Sie versuchen, die reguläre NotificationManager-Klasse anstelle von "startForeground()" zu verwenden, aber es wäre seltsam, wenn das die Ursache des Problems war. –

+0

'res/drawable /' ist fast nie die richtige Antwort. Das ist ein Synonym für 'res/drawable-mdpi /', und so wird Ihr Bild auf Geräten mit höherer Dichte hochskaliert. Auf Geräten mit sehr hoher Dichte kann das Bild, das mit 128x128 gestartet wurde, auf 512x512 ansteigen. An diesem Punkt werden Sie die 1MB-IPC-Transaktionsgröße überschreiten. Vielleicht möchten Sie sich die 'Bitmap' anschauen, die Sie von' decodeResource() 'zurückbekommen. – CommonsWare

Antwort

11

Sie müssen zunächst großes Symbol und dann kleines Symbol einstellen.

dieser Code in meinem Fall funktioniert:

mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_message)); 
    mBuilder.setSmallIcon(R.mipmap.ic_message); 
    mBuilder.setContentTitle("Inbox"); 
    mBuilder.setContentText("New message received"); 
+2

hat nicht für mich funktioniert – vgarzom

+0

@vgarzom haben Sie irgendeine Lösung gefunden? Das funktioniert auch nicht für mich –

2

Vor Lolipop gab es kein großes Symbol für Benachrichtigungen. Das kleine Icon sollte 64x64 groß sein und beim Erstellen wird es in zwei Farben dargestellt: weiß und transparent.

NotificationCompat.Builder mBuilder; 

if (SystemTools.isAndroidApiVersionBeforeLollipop()) { 
       mBuilder = 
         new NotificationCompat.Builder(context) 
           .setContentIntent(pendingIntent) 
           .setSmallIcon(iconRid) 
           .setColor(ContextCompat.getColor(context, R.color.transparent)) 
           .setContentTitle(caption) 
           .setContentText(text) 
           .setOngoing(true) 
           .setWhen(0) 
           .setPriority(NotificationCompat.PRIORITY_LOW) 
       ; 
      } else { 
       mBuilder = 
         new NotificationCompat.Builder(context) 
           .setContentIntent(pendingIntent) 
           .setSmallIcon(iconRid) 
           .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), bigIconRid)) 
           .setColor(ContextCompat.getColor(context, R.color.transparent)) 
           .setContentTitle(caption) 
           .setContentText(text) 
           .setOngoing(true) 
           .setWhen(0) 
           .setPriority(NotificationCompat.PRIORITY_LOW) 
       ; 

}

Verwandte Themen