2013-04-17 11 views
12

Ho scaricato un'immagine dal server come bitmap e la converto in drawable ora voglio usare questo drawable come icona di notifica. Ma non sono in grado di farlo. qui è il mio codice:Imposta Drawable o Bitmap come icona In Notification in Android

Notification notification = new NotificationCompat.Builder(context) 

    .setContentTitle(title) 

    .setContentText(message) 

    .setContentIntent(intent) 

    .setSmallIcon(bitmap) 

    .setWhen(when) 

    .build(); 

ma icona è un valore int risorse in modo che quando l'ho usato dà errore. Qualsiasi aiuto

Edit:

Ora posso aggiornare il mio codice e ora sto facendo così:

  Notification notification = new NotificationCompat.Builder(context) 

     .setContentTitle(title) 

     .setContentText(message) 

     .setContentIntent(intent) 

     .setSmallIcon(icon) 

     .setLargeIcon(bitmap) 

     .setWhen(when) 

     .build(); 

ma dà grande icona sul lato sinistro e piccola icona sul lato destro. Non voglio che questo quindi per questo rimuovo linea setSmallIcon ed eseguire il mio codice, ma non mi mostra le notifiche

+1

http://stackoverflow.com/a/16051724/931982 ... se la mia risposta qui – stinepike

+0

grazie @StinePike vedere la mia domanda modificata – User42590

+0

lol per qualche motivo non so perché .. la piccola icona sul lato destro è chiamata grande icona .. solo lì puoi impostare la bitmap. In api superiori puoi creare la tua notifica con il layout personalizzato – stinepike

risposta

21

Se si leggono i documenti di sviluppo specifici per Notification.Builder vedrete che setSmallIcon(int icon) ha bisogno di un un ID di risorsa nel pacchetto dell'applicazione del drawable da usare.

Scaricare un'immagine, convertirlo in una bitmap e impostarlo su setSmallIcon() ti darà ancora un errore.

Anche se si dovesse convertire il Bitmap ad un Drawable come questo per esempio:

Drawable d = new BitmapDrawable(getResources(), bmpFinal); 

è ancora in corso per darvi un errore perché che Drawable fa non esiste nel pacchetto dell'applicazione.

L'unica soluzione possibile è quella di utilizzare una risorsa Drawable che esiste nella vostra package e impostarlo al metodo setSmallIcon(). Utilizzo tipico:

builder.setSmallIcon(R.drawable.ic_launcher); 

In alternativa, il setLargeIcon (Bitmap icon) richiede un'istanza bitmap. Senza dover apportare ulteriori modifiche al codice corrente (poiché hai già un Bitmap), puoi usarlo così com'è, se soddisfa le tue esigenze.

In caso contrario, è necessario utilizzare una risorsa Drawable già presente in una delle cartelle drawable.

+5

'setLargeIcon (Bitmap)' non funziona per me btw. – m0skit0

6

Ci sono alcuni punti su questa domanda, soprattutto in relazione con API 23+, se siete interessati solo a setSmallIcon, andare al 2 ° e 3 ° argomenti.

1 °:

È possibile impostare il LargeIcon da un Drawable (invece di Resource id), come la seguente

Drawable drawable= ContextCompat.getDrawable(this,R.drawable.your_drawable); 

      Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 

      NotificationCompat.Builder mBuilder = 
        new NotificationCompat.Builder(context) 
          .setLargeIcon(bitmap) 
          .setContentTitle("hahah") 
          .setContentText("Tap to stop") 
          .setOngoing(true); 

2 °:

Se è necessario impostare uno SmallIcon in API al di sotto 23, sarà necessario impostare un ID risorsa come R.drawable.your_resource. NotificationCompat.Builder non consente di utilizzare Drawable s or Bitmaps in setSmallIcon() `.

3 °:

per fortuna, il supporto è stato ampliato per Icon tipo su setSmallIcon() nella versione 23+, utilizzando il Notification.Builder, come segue:

Drawable drawable = ContextCompat.getDrawable(this,R.drawable.your_drawable); 

      Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 

      Notification.Builder mBuilder = 
        new Notification.Builder(context) 
          .setSmallIcon(Icon.createWithBitmap(bitmap)) 
          .setLargeIcon(bitmap) 
          .setContentTitle("hahah") 
          .setContentText("Tap to stop") 
          .setOngoing(true); 
+1

Grazie per l'ultimo, anche se non c'è ancora una soluzione per la vecchia versione .. Buono a sapersi comunque – Jenix

1

Meglio opzione ottenere icona dell'applicazione

Drawable drawable=getApplicationInfo().loadIcon(getPackageManager()); 
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 



.setSmallIcon(getApplicationInfo().icon) 
.setLargeIcon(bitmap)