Android NotificationManager giving me “no valid small icon” error

前端 未结 4 1783
悲&欢浪女
悲&欢浪女 2020-12-30 20:14

I am having a strange error with notification manager.

@Override
public void onMessageReceived(String from, Bundle data)
{
     Log.i(TAG, \"IP : \" + (Strin         


        
相关标签:
4条回答
  • 2020-12-30 20:34

    This suddenly started happening to my application. After some research, I found this change in my manifest file actually started causing it.

    from:

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

    to:

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

    I saw somewhere that somebody noted that it only checks for the icon if the target sdk version is set. Sure enough, in the source, there is this :

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

    Luckily, the solution was simple, just define the icon in the manifest:

      <application android:label="MyApp" android:icon="@mipmap/icon" >
    
    0 讨论(0)
  • 2020-12-30 20:39

    You have not called setSmallIcon() on the NotificationCompat.Builder. This provides the icon that will go in the status bar while the Notification is active.

    0 讨论(0)
  • 2020-12-30 20:55

    According to the 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);
        }
    }
    

    This error only happened when you set target API > LOLLIPOP_MR1(22) and notification do not have a small icon.

    0 讨论(0)
  • 2020-12-30 20:58

    You're actually not setting an icon for the push notification. Add .setSmallIcon(R.drawable.your_icon) to your notification.

     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);
    
    0 讨论(0)
提交回复
热议问题