Установите Drawable или Bitmap как значок в уведомлении на Android
Я загружаю изображение с сервера в виде растрового изображения и конвертирую его в drawable. Теперь я хочу использовать этот drawable как значок уведомления. Но я не могу этого сделать. вот мой код:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(bitmap)
.setWhen(when)
.build();
но значок - значение ресурса, поэтому, когда я его использовал, он дает ошибку. Любая помощь
Edit:
Теперь я обновляю свой код, и теперь я делаю так:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(icon)
.setLargeIcon(bitmap)
.setWhen(when)
.build();
но он дает большую иконку с левой стороны и маленькую иконку с правой стороны. Я не хочу этого для этого, я удаляю строку setSmallIcon и запускаю свой код, но он не показывает мне уведомления
Ответы
Ответ 1
Если вы прочтете документы разработчика, относящиеся к Notification.Builder
, вы увидите, что setSmallIcon(int icon)
идентификатор ресурса A в пакете приложений, который можно использовать для использования.
Загрузка изображения, преобразование в растровое изображение, а затем установка его на 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
.
Ответ 2
вы можете попробовать использовать этот метод
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
http://javatechig.com/android/android-notification-example-using-notificationcompat
Ответ 3
В этом вопросе есть некоторые моменты, в основном связанные с 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);
Ответ 4
Лучшая опция получить значок приложения
Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)
Ответ 5
Очень важно сделать изображение прозрачным