web-dev-qa-db-fra.com

Définissez Drawable ou Bitmap sous forme d'icône Dans Notification sous Android

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.

15
User42590

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.

23
Siddharth Lele

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

16
Remon Amin

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);
11
Lucas Paolillo

Meilleure option obtenir l'icône de l'application

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



.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)
3
Neeraj Singh

Il est très important de rendre l'image transparente 

0
Mohammed Abunada