NotificationListenerService get Notification Icon?

后端 未结 2 1525
半阙折子戏
半阙折子戏 2021-01-01 05:34

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

mStatusBarNotif

相关标签:
2条回答
  • 2021-01-01 05:51

    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()).

    0 讨论(0)
  • 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.getPackageNmae(), 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.setPackageNmae(sbn.getPackageName());
            notificationModel.setTitle(sbn.getNotification().extras.getString("android.title"));
            notificationModel.setBody(sbn.getNotification().extras.getString("android.text"));
            notificationModel.setIcon(sbn.getNotification().extras.getInt("android.icon"));
            notificationModel.setKey(sbn.getId());
    
    0 讨论(0)
提交回复
热议问题