2013-06-08 14 views
5

sto creando il mio notifica in questo modo:Android notifica grande immagine non funziona

 Intent intent = new Intent(this, OfferNotification.class); 
     PendingIntent pIntent = PendingIntent.getActivity(this, 0, 
       intent, 0); 
     Uri soundUri = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
       this).setSmallIcon(R.drawable.unknown) 
       //.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.unknown)) 
       .addAction(R.drawable.ic_launcher, "d", pIntent) 
       .setAutoCancel(true) 
       .setContentTitle("Offer from " + restaurantName) 
       .setContentText(offerDescriptoin).setSound(soundUri); 
     // Creates an explicit intent for an Activity in your app 
     Intent resultIntent = new Intent(this, OfferNotification.class); 
     resultIntent.putExtra("offerID", offer.getID()); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 

     stackBuilder.addParentStack(OfferNotification.class); 

     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = stackBuilder 
       .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(resultPendingIntent); 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     mNotificationManager.notify(offer.getID(), mBuilder.build()); 

quando ho usato piccola icona, funziona molto bene, ma quando uso icona grande, posso capelli la voce del nofitication ma la notifica stessa non appare, nessun aiuto pelase?

+1

se si sta eseguendo il codice in <3.0 android os allora non funziona. significa che NotificationCompat funziona in> 11 API. –

+0

sto usando 2.3 con supporto v4, il codice funziona, solo l'icona larg non funziona –

+0

nel supporto v4 non c'è supporto disponibile per NotificationCompat.Builder. in genere non è possibile farlo in <11 API Android. (Comprendo il tuo problema ma puoi utilizzare in questo modo -> http://stackoverflow.com/a/8869647/1168654) –

risposta

7

Le icone di Android (e altri elementi dell'interfaccia utente, come le lunghezze di trascinamento) sono misurate in dp. Un dp è un pixel indipendente dalla periferica e dalla densità. 1 dp equivale a 1 px su uno schermo a 160 dpi. Ma per convertire in altre densità dello schermo, è necessario moltiplicarlo per un fattore di densità. Quindi è generalmente consigliato che vengano fornite più immagini per la maggior parte delle icone. Ad esempio, le icone di notifica utilizzate nella barra di stato sono specificate come 24x24 dp, con un margine di 1 dp (quindi l'icona reale occupa solo un quadrato ottico 22x22 dp, anche se alcune delle AA possono sanguinare in quella 1) dp margin/safeframe). Per convertire 24 dp alle dimensioni effettive dei pixel, questi calcoli approssimativi sono utilizzati:

display density dp units * scale = px units 
ldpi ~120 dpi 24x24 dp * .75 = 18x18 px 
mdpi ~160 dpi 24x24 dp * 1.0 = 24x24 px 
hdpi ~240 dpi 24x24 dp * 1.5 = 36x36 px 
xhdpi ~320 dpi 24x24 dp * 2.0 = 48x48 px 

C'è anche una densità di visualizzazione intermedia chiamata tvdpi (~ 213 dpi) che si trova tra MDPI e hdpi e ha un fattore di scala di 1,33, ma questo è molto meno comune. Ciò che raccomandano i documenti Android è che si segua un rapporto di scala 3: 4: 6: 8 quando si forniscono immagini bitmap pre-ordinate (in genere PNG) per le densità di visualizzazione più comuni.

Non vedo da nessuna parte dove si specifica la dimensione di dp per le icone grandi utilizzate nelle notifiche, ma l'altezza di ciascuna notifica nella normale vista della casella di posta è 64 dp. Quindi questo significa che la dimensione massima per le icone/immagini mostrate non ci sarebbe:

ldpi:  48x48 px 
mdpi:  64x64 px 
hdpi:  96x96 px 
xhdpi: 128x128 px 

Se volete sapere esattamente che cosa le dimensioni dell'immagine stock di icone di Android sono, si dovrebbe essere in grado di scoprire da Android Modelli icon pack, v4.0.

1

Penso che si dovrebbe decodificare la bitmap prima di chiedere che nel Generatore, in questo modo:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.unknown); 
Intent intent = new Intent(this, OfferNotification.class); 
     PendingIntent pIntent = PendingIntent.getActivity(this, 0, 
       intent, 0); 
     Uri soundUri = RingtoneManager 
       .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
       this).setSmallIcon(R.drawable.unknown) 
       //.setLargeIcon(bitmap) 
       .addAction(R.drawable.ic_launcher, "d", pIntent) 
       .setAutoCancel(true) 
       .setContentTitle("Offer from " + restaurantName) 
       .setContentText(offerDescriptoin).setSound(soundUri); 

E 'forse non decodifica correttamente o nel tempo. Inoltre eliminerebbe uno sconosciuto qui.

+0

Ho provato la soluzione, ho ancora la possibilità di sentire la voce quando si utilizza l'icona grande –

+0

Questo codice è in esecuzione su un singolo thread (il looper UI). Non ci sono condizioni di gara. Sembra che il metodo 'setLargeIcon' sia commentato. –

+0

Non fa differenza – bendaf

3

Ho avuto la stessa causa perché mi mancavano le chiamate a SetSmallIcon e SetLargeIcon. Devi specificare una piccola icona, altrimenti la notifica non viene mostrata. L'icona grande è facoltativa e, se non impostata, viene utilizzata l'icona piccola.

+0

Grazie. Questo mi ha aiutato. –

Problemi correlati