2016-03-04 11 views
6

Quando aggiungo il codice mNotificationBuilder.setLargeIcon(BitmapFactory.decodeResource( getResources(), R.drawable.ic_large_icon)); alla mia notifica smette di funzionare senza errori o avvisi. Succede solo su pre-Lollipop, su Lollipop e oltre funziona alla grande. E con "funziona" intendo che la notifica si presenta.NotificationCompat.Builder setLargeIcon() non funziona?

mio codice di esempio:

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()); 

ho cercato di caricare il bitmap in modi diversi, ma continua a non aver ... L'icona è 128x128 così le dimensioni di esso non dovrebbe essere un problema?

Ho anche provato diversi ID, ma nessuno che risolve il problema.

Sarei così grato di qualsiasi consiglio, per favore qualsiasi spinta nella giusta direzione significherebbe il mondo per me.

EDIT 1 #

Questa notifica viene emesso da un servizio. Il servizio è attivo e Log prints mi dice che il codice dopo "startForeground()" viene eseguito.

+0

"L'icona è 128x128 quindi la dimensione di esso non dovrebbe essere un problema?" - quale directory (o directory) hai questa icona? – CommonsWare

+0

Res/drawable, ha anche provato ad utilizzare Android Asset Studio (di Roman) per creare più risoluzioni da inserire nelle diverse sottodirectory. Ma non è stato d'aiuto neanche. C'è qualche possibilità che sia importante dove viene messo? Provare ad utilizzare la normale classe NotificationManager invece di "startForeground()", ma sarebbe strano se questa fosse la causa del problema. –

+0

'res/drawable /' non è quasi mai la risposta giusta. Questo è un sinonimo di 'res/drawable-mdpi /', e quindi l'immagine verrà ingrandita su dispositivi a più alta densità. Quindi, su dispositivi ad alta densità, l'immagine che iniziava a 128x128 potrebbe salire a 512x512, a quel punto supererai il limite di dimensioni della transazione IPC di 1 MB. Potresti voler vedere il 'Bitmap' che stai recuperando da' decodeResource() '. – CommonsWare

risposta

11

È necessario prima impostare l'icona grande quindi l'icona piccola.

nel mio caso questo codice sta lavorando:

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

non ha funzionato per me – vgarzom

+0

@vgarzom hai trovato qualche soluzione? Anche questo non funziona per me –

2

Prima Lolipop non c'era grande icona per le notifiche. La piccola icona dovrebbe essere 64x64 e mentre la si crea ricordarsi che sarà renderizzata in due colori: bianco e trasparente.

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) 
       ; 

}