如何在NotificationListenerService

时间:2016-10-02 22:45:03

标签: android notifications icons

我有一个类扩展NotificationListenerService,如何在onNotificationPosted(StatusBarNotification sbn,RankingMap rankingMap)方法中获得一个大的通知图标?

要使用小图标:

 public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
    extras = sbn.getNotification().extras;
    smallIcon = extras.getInt(Notification.EXTRA_SMALL_ICON, 0);
...
}

并返回该包中drawable的id,但是如何获得一个大图标呢? 我试过这样的事情:

 final Bitmap iconLarge = (Bitmap) extras.getParcelable(Notification.EXTRA_LARGE_ICON);

那个

final Bitmap iconLarge = sbn.getNotification().largeIcon;

它总是返回null,我的目标是API 21+

sbn.getNotification().getLargeIcon()

不起作用,只有23岁以上。 有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

根据Android文档,

getLargeIcon()方法仅在API级别23中添加。

这就是为什么当您尝试在Android Lollipop(API级别21)中访问它并且在Marshmallow(API级别23)的情况下正常工作时,API会返回null

答案 1 :(得分:0)

解决:

Bundle extras = sbn.getNotification().extras;
Bitmap bigIcon = (Bitmap) extras.get(Notification.EXTRA_LARGE_ICON);

答案 2 :(得分:0)

试试:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
   (bundle["android.largeIcon"] as Icon).loadDrawable(baseContext).toBitmap()
 } else {
    bundle.get(Notification.EXTRA_LARGE_ICON) as Bitmap
}