it-swarm.com.ru

Установить Drawable или Bitmap как значок в уведомлении в Android

Я загружаю изображение с сервера в виде растрового изображения и преобразую его в рисунок для рисования. Теперь я хочу использовать этот рисунок в качестве значка уведомления. Но я не могу этого сделать. вот мой код:

    Notification notification = new NotificationCompat.Builder(context)

    .setContentTitle(title)

    .setContentText(message)

    .setContentIntent(intent)

    .setSmallIcon(bitmap)

    .setWhen(when)

    .build(); 

но иконка - это значение для int, поэтому при его использовании выдается ошибка. Любая помощь

Правка:

Теперь я обновляю свой код, и теперь я делаю так:

          Notification notification = new NotificationCompat.Builder(context)

        .setContentTitle(title)

        .setContentText(message)

        .setContentIntent(intent)

        .setSmallIcon(icon)

        .setLargeIcon(bitmap)

        .setWhen(when)

        .build();

но это дает большой значок на левой стороне и маленький значок на правой стороне. Я не хочу этого, поэтому для этого я удаляю строку setSmallIcon и запускаю свой код, но он не показывает мне уведомления

15
User42590

Если вы прочитаете документы разработчика, относящиеся к Notification.Builder , то увидите, что setSmallIcon(int icon) требуется идентификатор ресурса в пакете приложения, который можно использовать.

Загрузка изображения, преобразование в растровое изображение, а затем установка его в setSmallIcon() по-прежнему приведет к ошибке.

Даже если вам нужно преобразовать Bitmap в Drawable, например, так:

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

он все еще выдаст вам ошибку, потому что Drawable делает не существует в вашем пакете приложения.

Единственное возможное решение - использовать ресурс Drawable, который существует в вашем package, и установить для него метод setSmallIcon(). Типичное использование:

builder.setSmallIcon(R.drawable.ic_launcher);

В качестве альтернативы setLargeIcon (Bitmap icon) требуется экземпляр Bitmap. Без необходимости вносить какие-либо дополнительные изменения в ваш текущий код (поскольку у вас уже есть Bitmap), вы можете использовать его как есть, если он соответствует вашим требованиям.

Если нет, вам в значительной степени придется использовать ресурс Drawable, который уже присутствует в одной из папок drawable.

23
Siddharth Lele

вы можете попробовать использовать этот метод 

 builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));

http://javatechig.com/Android/android-notification-example-using-notificationcompat

16
Remon Amin

В этом вопросе есть некоторые моменты, в основном связанные с API 23+. Если вас интересует только setSmallIcon, перейдите ко 2-му и 3-му разделам.

1-й:

Вы можете установить LargeIcon из Drawable (вместо идентификатора ресурса), как показано ниже

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-й: 

Если вам нужно установить маленькую иконку в API ниже 23, вам нужно установить идентификатор ресурса, например R.drawable.your_resource. NotificationCompat.Builder не позволяет вам использовать Drawables или Bitmaps в setSmallIcon().

3-й: 

к счастью, поддержка была расширена до типа Icon в setSmallIcon() в версии 23+ с использованием Notification.Builder, например: 

 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

Лучший вариант получить значок приложения

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



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

Очень важно сделать изображение прозрачным 

0
Mohammed Abunada