Je télécharge une image du serveur au format bitmap et la convertis en dessinable. Je souhaite maintenant utiliser cette icône de notification dessinable. Mais je suis incapable de faire ça. voici mon code:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(bitmap)
.setWhen(when)
.build();
mais l'icône est une valeur int de ressources, donc quand je l'utilise, cela donne une erreur. De l'aide
Modifier:
Maintenant je mets à jour mon code et maintenant je fais comme ça:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(icon)
.setLargeIcon(bitmap)
.setWhen(when)
.build();
mais cela donne une grande icône à gauche et une petite icône à droite. Je ne veux pas cela, alors pour cela, je supprime la ligne setSmallIcon et lance mon code, mais il ne me montre pas les notifications.
Si vous lisez les documents de développement spécifiques à Notification.Builder
, vous verrez que setSmallIcon(int icon)
nécessite un Un ID de ressource dans le package de l'application pouvant être utilisé}.
Le téléchargement d'une image, sa conversion en bitmap et son paramétrage à la setSmallIcon()
continueront de générer une erreur.
Même si vous deviez convertir la Bitmap
en une Drawable
comme ceci par exemple:
Drawable d = new BitmapDrawable(getResources(), bmpFinal);
il va toujours vous donner une erreur parce que Drawable
n'existe pas n'existe pas dans votre package d'application.
La seule solution possible consiste à utiliser une ressource Drawable
qui existe dans votre package
et à la définir sur la méthode setSmallIcon()
. Utilisation typique:
builder.setSmallIcon(R.drawable.ic_launcher);
Sinon, la setLargeIcon (Bitmap icon)
nécessite une instance Bitmap. Sans avoir à apporter de modifications supplémentaires à votre code actuel (puisque vous avez déjà une Bitmap
), vous pouvez l'utiliser tel quel, si cela correspond à vos besoins.
Sinon, vous devez utiliser une ressource Drawable
déjà présente dans l'un des dossiers drawable
.
vous pouvez essayer d'utiliser cette méthode
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
http://javatechig.com/Android/android-notification-example-using-notificationcompat
Il y a quelques points à propos de cette question, principalement liés à l'API 23+, si vous êtes uniquement intéressé par setSmallIcon, passez aux 2e et 3e sujets.
1er:
Vous pouvez définir le LargeIcon à partir d’un Drawable (au lieu d’un ID de ressource), comme suit:
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ème:
Si vous devez définir une petite icône dans l'API inférieure à 23, vous devez définir un identifiant de ressource tel que R.drawable.your_resource
. Le NotificationCompat.Builder
ne vous permet pas d'utiliser des éléments graphiques ou bitmap dans setSmallIcon()
.
3ème:
heureusement, la prise en charge a été étendue à Icon
type sur setSmallIcon()
dans la version 23+, à l'aide de Notification.Builder, comme suit:
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);
Meilleure option obtenir l'icône de l'application
Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)
Il est très important de rendre l'image transparente