Android NotificationListenerService获取通知图标?

Android NotificationListenerService获取通知图标?,android,notifications,android-4.3-jelly-bean,Android,Notifications,Android 4.3 Jelly Bean,在扩展新服务(SDK18,JB-4.3)NotificationListenerService的服务中,我希望获得通知的状态栏图标 mStatusBarNotification.getNotification().icon返回可绘制状态栏的资源id,但该资源id自然不在我的应用程序范围/资源内。还有mStatusBarNotification.getNotification().largeIcon(返回Bitmap),但这并不是为所有通知设置的,并返回“错误”图标(扩展通知抽屉中的图像)。使用g

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


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

使用
getPackageName()
打开
状态通知
以查找发布
通知的应用程序
。然后,您可以获取该包的
上下文
,然后使用该
上下文
检索图像(例如,通过
getResources()
)。

这是另一种解决方法

我们可以从
sbn.getNotification().extras.getInt(“android.icon”)
中获取可绘制内容,然后使用customview在通知中显示此可绘制内容

这是如何使用android.icon值获得可绘制性:

        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();
        }
我的
通知模型是:

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

这是怎么回事?setSmallIcon仍然需要一个int资源ID,使用createPackageContext和getResources只能让我访问Drawable本身。@KyleJahnke:我不知道有
setSmallIcon()
方法与这个问题有关。也许您希望创建一个
通知
;这个问题不是关于创建一个
通知
,而是检查一个现有的通知。他问的是如何找到另一个通知输入的图标
setSmallIcon()
notification.extras.getInt(notification.EXTRA\u SMALL\u图标)
@Commonware这没有提供正确的答案。@NoumanCh:您在回答中使用了我提供的技术(
createPackageContext()
)。