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

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

Notification notification = new NotificationCompat.Builder(context) .setContentTitle(title) .setContentText(message) .setContentIntent(intent) .setSmallIcon(bitmap) .setWhen(when) .build(); 

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

Редактировать:

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

  Notification notification = new NotificationCompat.Builder(context) .setContentTitle(title) .setContentText(message) .setContentIntent(intent) .setSmallIcon(icon) .setLargeIcon(bitmap) .setWhen(when) .build(); 

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

Solutions Collecting From Web of "Установите Drawable или Bitmap как значок в уведомлении на Android"

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

Загрузка изображения, преобразование в растровое изображение, а затем установка его в setSmallIcon() все равно 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 папок.

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

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

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

В этом вопросе есть несколько вопросов, в основном связанных с 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); 

Второе:

Если вам нужно установить SmallIcon в API ниже 23, вам нужно будет установить идентификатор ресурса, например R.drawable.your_resource . NotificationCompat.Builder не позволяет использовать Drawable s or Bitmaps in 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); 

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

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