8

我目前正在研究 Android Support Package v4 Rev 10 的 NotificationCompat 功能。文档说“setContentText()”显示通知中的第二行。API 8 到 API 15 都是如此。但是,如果我尝试在 API 16 中使用此方法,我的通知将错过第二行。我只看到标题,但看不到第二行。添加多行没问题(使用'addline()')。

这是我使用的 NotificationCompat.Builder 的代码:

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;
}

如果我想添加多行并显示通知,我使用以下代码:

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());

这是 Jelly Bean 的一个想要的功能,setContentText 被忽略还是我错过了什么?该代码在所有版本上运行都没有错误,但我想在第二行添加我在 ICS 或更早版本上使用的相同代码。

我还添加了两个屏幕截图。第一个来自我的 ICS 4.0.3 华为 MediaPad,第二个来自 4.1.1 的 Galaxy Nexus。为简单起见,从1开始的第二行是与通知标题相同的字符串。它在2上不可见。

提前感谢您的帮助!

ICS 4.0.3 设备 JellyBean 4.1.1 设备

4

3 回答 3

7

这是 Jelly Bean 的一个想要的功能,setContentText 被忽略还是我错过了什么?

的值setContextText()应该在折叠状态下可见(例如,如果展开,则两指向上滑动,或者它不是最顶部的Notification)。鉴于您上面的代码,它将被替换NotificationCompat.InboxStyle为展开状态。

于 2012-08-16T14:05:08.840 回答
1

如果要在默认展开状态下显示通知。只需设置构建器的 PRIORITY_MAX。像:builder.setPriority(Notification.PRIORITY_MAX);

于 2016-04-04T04:31:29.647 回答
0

我现在在@CommonsWare 的帮助下解决了这个问题并创建了一个简单的方法,它将检查当前的 API 级别并决定应该使用什么命令:

private void createCompatibleSecondLine(CharSequence pTitle,
        NotificationCompat.Builder pBuilder, InboxStyle pInboxStyle) {
    // set the text for pre API 16 devices (or for expanded)
    if (android.os.Build.VERSION.SDK_INT < 16) {
        pBuilder.setContentText(pTitle);
    } else {
        pInboxStyle.setSummaryText(pTitle);
    }
}

所以它并不疯狂,也远非完美,但它为我完成了这项工作。总是欢迎改进:)

于 2012-08-17T13:44:09.530 回答