Why doesn't Jelly Bean show the second row in a Notification?

Markus Rudel picture Markus Rudel · Aug 16, 2012 · Viewed 8.2k times · Source

I'm currently looking into the NotificationCompat features of the Android Support Package v4 Rev 10. The documentation says that 'setContentText()' shows the second row in a notification. This is true for API 8 up to API 15. However, if I try to use this method in API 16 my Notifications will miss the second line. I see only the Title but not the second line. Adding multiple lines is no problem (using 'addline()').

Here's my code for the NotificationCompat.Builder I used:

private NotificationCompat.Builder buildNormal(CharSequence pTitle) {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            getSherlockActivity());

    builder.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL);
    // set the shown date
    builder.setWhen(System.currentTimeMillis());
    // the title of the notification
    builder.setContentTitle(pTitle);
    // set the text for pre API 16 devices
    builder.setContentText(pTitle);
    // set the action for clicking the notification
    builder.setContentIntent(buildPendingIntent(Settings.ACTION_SECURITY_SETTINGS));
    // set the notifications icon
    builder.setSmallIcon(android.R.drawable.stat_sys_download_done);
    // set the small ticker text which runs in the tray for a few seconds
    builder.setTicker("This is your ticker text.");
    // set the priority for API 16 devices
    builder.setPriority(Notification.PRIORITY_DEFAULT);
    return builder;
}

And if I want to add multiple lines and show the notification, I uses this code:

NotificationCompat.Builder normal = buildNormal("This is an Expanded Layout Notification.");
    NotificationCompat.InboxStyle big = new NotificationCompat.InboxStyle(
            normal);

    // summary is below the action
    big.setSummaryText("this is the summary text");
    // Lines are above the action and below the title
    big.addLine("This is the first line").addLine("The second line")
            .addLine("The third line").addLine("The fourth line");

    NotificationManager manager = getNotificationManager(normal);
    manager.notify(Constants.NOTIFY_ID, big.build());

Is this a wanted feature of Jelly Bean, that setContentText is ignored or am I missing something? The code runs on all versions without errors, but I would like to add the second line with the same code I use on ICS or earlier.

I've also added two screenshots. the first from my ICS 4.0.3 Huawei MediaPad and the second from a Galaxy Nexus with 4.1.1. The second line from 1 is for simplicity the same String as the notification title. It is not visible on 2.

Thanks for your help in advance!

The ICS 4.0.3 device The JellyBean 4.1.1 device

Answer

CommonsWare picture CommonsWare · Aug 16, 2012

Is this a wanted feature of Jelly Bean, that setContentText is ignored or am I missing something?

The value of setContextText() should be visible in the collapsed state (e.g., two-finger swipe up if expanded, or have it not be the top-most Notification). It will be replaced by NotificationCompat.InboxStyle in the expanded state, given your code above.