4

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

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

4

2 回答 2

6

使用getPackageName()onStatusBarNotification找出发布Notification. 然后,您可以使用createPackageContext()获取Context该包的 a,然后使用它Context来检索图像(例如,通过getResources())。

于 2013-08-04T14:35:15.830 回答
1

这是替代解决方法。

我们可以从中获取drawable sbn.getNotification().extras.getInt("android.icon"),然后使用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());
于 2019-02-26T11:06:26.420 回答