【问题标题】:Android NotificationManager giving me "no valid small icon" errorAndroid NotificationManager 给我“没有有效的小图标”错误
【发布时间】:2015-11-11 00:54:28
【问题描述】:

通知管理器出现一个奇怪的错误。

@Override
public void onMessageReceived(String from, Bundle data)
{
     Log.i(TAG, "IP : " + (String) data.get("ip"));
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
     Intent acceptNextIntent = new Intent(MainActivity.BROADCAST_KEY_ACCEPT);
//        acceptNextIntent.putExtra("ip", (String) data.get("blah")); //add stuff here
     PendingIntent acceptNextPendingIntent = PendingIntent.getBroadcast(this, 0, acceptNextIntent, 0);

     Intent declineNextIntent = new Intent(MainActivity.BROADCAST_KEY_DECLINE);
     PendingIntent declineNextPendingIntent = PendingIntent.getBroadcast(this, 0, declineNextIntent, 0);

     NotificationCompat.Action acceptAction = new NotificationCompat.Action
                .Builder(R.drawable.common_signin_btn_icon_disabled_focus_light, "Grant Request", acceptNextPendingIntent).build();

     NotificationCompat.Action declineAction = new NotificationCompat.Action
                .Builder(R.drawable.common_signin_btn_icon_focus_dark, "Decline Request", declineNextPendingIntent).build();

     NotificationCompat.Builder notification = new NotificationCompat.Builder(this)
                .setContentTitle("New Password Request From " + (String) data.get("ip"))
                .addAction(acceptAction)
                .addAction(declineAction);

     notificationManager.notify(1, notification.build()); //ERROR HERE

错误信息:

9.474 9327-9371/com.inh.amnesia_application I/MyGcmListenerService: IP : 128.239.213.39
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime: Process: com.inh.amnesia_application, PID: 9327
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(pri=0 contentView=com.inh.amnesia_application/0x1090085 vibrate=null sound=null defaults=0x0 flags=0x0 color=0x00000000 actions=2 vis=PRIVATE)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at android.app.NotificationManager.notify(NotificationManager.java:222)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at android.app.NotificationManager.notify(NotificationManager.java:194)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at com.inh.amnesia_application.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:65)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zzt(Unknown Source)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zzk(Unknown Source)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService$1.run(Unknown Source)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)

这是否意味着我尝试访问的图标不存在?我不确定如何解释此错误,搜索此错误消息不会产生任何结果。

【问题讨论】:

    标签: android google-cloud-messaging notificationmanager


    【解决方案1】:

    您实际上并没有为推送通知设置图标。将.setSmallIcon(R.drawable.your_icon) 添加到您的通知中。

     NotificationCompat.Builder notification = new NotificationCompat.Builder(this)
                .setContentTitle("New Password Request From " + (String) data.get("ip"))
                .setSmallIcon(R.drawable.your_icon)
                .addAction(acceptAction)
                .addAction(declineAction);
    

    【讨论】:

    • 我找到了源code,好像只有target api > lolipop会报错。
    • 我在使用通知设置 LED 时遇到此错误,在这种情况下,图标应该是无关紧要的,因为它没有显示...
    【解决方案2】:

    你还没有打电话给setSmallIcon() on the NotificationCompat.Builder。这提供了在Notification 处于活动状态时将显示在状态栏中的图标。

    【讨论】:

    • 嗨,@CommonsWare,我在Service 上添加了一条通知,并调用了setSmallIcon()。但仍然得到同样的错误Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon)
    • @AGMTazim:我建议您提出一个单独的堆栈溢出问题,在其中提供minimal reproducible example,包括创建Notification 的代码和生成的堆栈跟踪。您与setSmallIcon() 一起使用的可绘制资源可能存在问题。
    【解决方案3】:

    根据Android NotificationManager Source Code

    if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
        if (notification.getSmallIcon() == null) {
            throw new IllegalArgumentException("Invalid notification (no valid small icon): "
                    + notification);
        }
    }
    

    此错误仅在您设置目标 API > LOLLIPOP_MR1(22) 并且通知没有小图标时发生。

    【讨论】:

      【解决方案4】:

      这突然开始发生在我的应用程序中。经过一番研究,我发现我的清单文件中的这种变化实际上开始导致它。

      来自:

        <uses-sdk android:minSdkVersion="21" />
      

      到:

        <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
      

      我在某处看到有人指出,如果设置了目标 sdk 版本,它只会检查图标。果然,源码里有这个:

      if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
          if (notification.getSmallIcon() == null) {
              throw new IllegalArgumentException("Invalid notification (no valid small icon): "
                      + notification);
          }
      }
      

      幸运的是,解决方案很简单,只需在清单中定义图标即可:

        <application android:label="MyApp" android:icon="@mipmap/icon" >
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多