2015-04-19 23 views
15

Quando si utilizza Parse per le notifiche push, la nostra app ha sempre visualizzato l'icona di avvio dell'applicazione. Nell'ultima versione di Android 5.1, l'icona sembra vuota (un quadrato bianco).L'icona di notifica push di Android 5.1 è vuota

ho provato a fissare l'icona nella meta-dati:

<meta-data android:name="com.parse.push.notification_icon" android:resource="@drawable/noti_icon"/> 

Sulla base della domanda here

Ma nulla sembra funzionare. Qualche idea?

+3

Qualsiasi pixel solido nell'icona è dipinto sopra con il colore bianco su Lollipop. Usa un'icona con "buchi" per esprimere il contrasto. –

+0

se l'icona è bianca, viene cancellata – thepoosh

+0

segui questo link http://stackoverflow.com/questions/28387602/notification-bar-icon-turns-white-in-android-5-lollipop – Nilabja

risposta

2

Non è correlato alla nitidezza o alla nitidezza, ma proprio come Android 5.0 gestisce le icone di notifica. Per ulteriori dettagli vedere questa domanda richiesta: Notification bar icon turns white in Android 5 Lollipop

+0

È vero, ma si applica solo all'icona della barra di notifica: l'icona sulla notifica rimane colorata. –

+0

Quando si seleziona l'icona SDK a sopra 20 mostrerà le icone bianche non solo sulla barra ma anche sulle notifiche –

12

È necessario utilizzare un'icona trasparente e bianca su Android Lollipop 5.0 o versioni successive. Puoi estendere la classe ParsePushBroadcastReceiver e sovrascrivere i due metodi per rendere l'icona di notifica compatibile con queste API Android.

@Override 
protected int getSmallIconId(Context context, Intent intent) { 
    return R.drawable.your_notifiation_icon; 
} 

@Override 
protected Bitmap getLargeIcon(Context context, Intent intent) { 
    return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon); 
} 

Ricordarsi di personalizzare il codice per supportare Lollipop e le API precedenti.

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon_lollipop); 
    } 
    else{ 
     return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon); 
    } 
+0

Ho implementato il getSmallIconId e ha funzionato come si è già spiegato –

+1

Molte grazie per la tua risposta @Pelanes. Quindi per estenderlo, in pratica devi creare una classe come MyPushBroadcastReceiver che estende ParsePushBroadcastReceiver e sovrascrive getSmallIconId (...) e getLargeIcon (...). Non dimenticare di specificare il tuo ricevitore in manifest. Sul lecca-lecca saranno usate icone piccole e grandi. Sull'emulatore 2.3.7 (che ho testato) solo piccolo. –

0

Anche se @Pelanes ha la risposta corretta (e dovrebbe essere accettata), ecco cosa ho fatto. Si noti che lo stato Parse docs for getSmallIconId il seguente:

Retrieves the small icon to be used in a Notification. The default implementation uses the icon specified by com.parse.push.notification_icon meta-data in your AndroidManifest.xml with a fallback to the launcher icon for this package. To conform to Android style guides, it is highly recommended that developers specify an explicit push icon.

Quindi non è del tutto necessario per ignorare il getSmallIconId() e getLargeIcon) metodi (.

Quello che ho fatto per risolvere il problema era che ho appena fatto una copia della mia icona, forato "buchi" trasparenti nell'icona e impostato i meta-dati com.parse.push.notification_icon nel mio manifest per puntare a questa nuova icona.

Per Android 5.0, è necessario che l'icona di notifica sia bianca e trasparente, come altri hanno menzionato. Quindi è necessario creare l'icona separata. Una riga nel manifest e un nuovo file drawable è tutto ciò che serve.

+0

Sei sicuro di non dover definire in che modo le diverse versioni del sistema operativo devono gestire l'icona di notifica?Ho eseguito ciò che hai suggerito e sembra che l'icona di notifica impostata con 'com.parse.push.notification_icon' sia ora utilizzata sia in Android 4.4 che in 5.1. – Alex

+0

Ho provato con 5.1 e 4.4.2. 5.1 usa la nuova icona, 4.4.2 usa l'icona normale della app ... Non sono sicuro del motivo per cui ciò sta accadendo per me ma non per te. Forse per giocare sul sicuro dovrai differenziare comunque. Modificherò la mia risposta. –

0

Prova questo codice.

Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 

NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setLargeIcon(largeIcon) 
       .setContentText(data) 
       .setContentTitle("Notification from Parse") 
       .setContentIntent(pendingIntent);