Android NotificationListenerService获取通知图标?
在扩展新服务(SDK18,JB-4.3)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
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()
)。