Load image from url in notification Android

前端 未结 8 829
北海茫月
北海茫月 2020-11-28 21:48

In my android application, i want to set Notification icons dynamically which will be loaded from URL. For that, i have used setLargeIcon property of Notificati

8条回答
  •  感动是毒
    2020-11-28 22:39

    Since image is loaded from internet, it should be done async in a background thread. Either use async task or Glide (for efficient image loading).

    To load image notification, you need to use "NotificationCompat.BigPictureStyle()". This requires a bitmap (which has to be extracted from image url)

    Most of the API's and methods of Glide are now deprecated. Below is working with Glide 4.9 and upto Android 10.

     // Load bitmap from image url on background thread and display image notification
            private void getBitmapAsyncAndDoWork(String imageUrl) {
    
                final Bitmap[] bitmap = {null};
    
                Glide.with(getApplicationContext())
                        .asBitmap()
                        .load(imageUrl)
                        .into(new CustomTarget() {
                            @Override
                            public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) {
    
                                bitmap[0] = resource;
                                // TODO Do some work: pass this bitmap
                                displayImageNotification(bitmap[0]);
                            }
    
                            @Override
                            public void onLoadCleared(@Nullable Drawable placeholder) {
                            }
                        });
            }
    

    Display the image notification once, the bitmap is ready.

    private void displayImageNotification(Bitmap bitmap) {
    
          NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), getChannelId());
                builder
                        .setContentTitle(title)
                        .setContentText(subtext)
                        .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)
                        .setSmallIcon(SMALL_ICON)
                        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                        .setColor(getApplicationContext().getColor(color))
                        .setAutoCancel(true)
                        .setOngoing(false)
                        .setOnlyAlertOnce(true)
                        .setContentIntent(pendingIntent)
                         .setStyle(
                         new NotificationCompat.BigPictureStyle().bigPicture(bitmap))
                        .setPriority(Notification.PRIORITY_HIGH);
    
            getManager().notify(tag, id, builder.build());
    }
    

提交回复
热议问题