Question

In a Service extending the new (SDK18, JB-4.3) NotificationListenerService, I'd like to get the Notification's status bar icon.

mStatusBarNotification.getNotification().icon returns the resource id of the status bar drawable, but that resource id is naturally not within my app's scope/resources. There's also mStatusBarNotification.getNotification().largeIcon (returning a Bitmap), but that's not set for all notifications and returns the "wrong" icon (the image in the expanded notification drawer).

Was it helpful?

Solution

Use getPackageName() on StatusBarNotification to find out the app that posted the Notification. You can then use createPackageContext() to get a Context for that package, then use that Context to retrieve the image (e.g., via getResources()).

OTHER TIPS

This is the alternative workaround.

We can get drawable from sbn.getNotification().extras.getInt("android.icon") and then use customview to show this drawable in the notification.

This is how to get Drawable using android.icon value:

            RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_push_notification);
            contentView.setImageViewResource(R.id.image, R.mipmap.ic_launcher);
            contentView.setTextViewText(R.id.title, notificationModel.getTitle());
            contentView.setTextViewText(R.id.text, notificationModel.getBody());
           

            try {
                   //now get the context of other app and then get drawable from resoures
                    Drawable drawable1 = context.createPackageContext(notificationModel.getPackageName(), CONTEXT_IGNORE_SECURITY).getDrawable(notificationModel.getIcon());
                    Bitmap bitmap = drawableToBitmap(drawable1);
                    contentView.setImageViewBitmap(R.id.image, bitmap);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }

My notificationModel is:

notificationModel.setKey(sbn.getId());
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top