NotificationListenerService获取通知图标



在扩展新的(SDK18,JB-4.3)NotificationListenerService的服务中,我想获得通知的状态栏图标。

mStatusBarNotification.getNotification().icon返回状态栏drawable的资源id,但该资源id自然不在我的应用程序的作用域/资源范围内。还有mStatusBarNotification.getNotification().largeIcon(返回Bitmap),但这并不是为所有通知设置的,而是返回"错误"的图标(扩展的通知抽屉中的图像)。

StatusBarNotification上使用getPackageName()查找发布Notification的应用程序。然后,您可以使用createPackageContext()获取该包的Context,然后使用该Context检索图像(例如,通过getResources())。

这是另一种解决方法。

我们可以从sbn.getNotification().extras.getInt("android.icon")获取drawable,然后使用customview在通知中显示该drawable。

以下是如何使用android.icon值获得Drawable:

            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();
            }

我的notificationModel是:

notificationModel.setKey(sbn.getId());

相关内容

  • 没有找到相关文章