添加摘要通知后,Android组通知不会报警(Android 6.0)

时间:2016-05-02 16:56:35

标签: android android-notifications android-6.0-marshmallow

我正在尝试像Hangouts一样使用本地通知。我希望每次收到新的短信时都会出现抬头通知。但是当有两个或更多未读通知时,我想在Android通知栏中显示摘要通知。看起来像是通过组堆叠通知并添加组摘要应该按照here所述的方式工作。下面的代码似乎适用于Android 5.0和5.1,但在Android 6.0上,当存在该组的摘要通知时,本地通知不会在抬头视图中报警/显示。因此,只显示初始通知。

public class MainActivity extends AppCompatActivity {

private Button _button = null;
final static String GROUP_KEY_EMAILS = "group_key_emails";
private int messageNum = 1;

private void CreateNotification() {
    // Build the notification, setting the group appropriately
    Notification headsUpNotification = new NotificationCompat.Builder(this)
            .setContentTitle("Title")
            .setContentText("New Message" + messageNum)
            .setSmallIcon(R.drawable.pngreceivedtextmessage)
            .setGroup(GROUP_KEY_EMAILS)
            .setPriority(Notification.PRIORITY_HIGH)
            .setDefaults(Notification.DEFAULT_ALL)
            .build();

    // Issue the notification
    NotificationManagerCompat notificationManager =
            NotificationManagerCompat.from(this);
    notificationManager.notify(messageNum, headsUpNotification);

    Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),
            R.drawable.pngreceivedmessageicon);

    if(messageNum > 1) {
        // Create a summary notification since we have more than 1
        Notification summaryNotification = new NotificationCompat.Builder(this)
                .setContentTitle("Summary")
                .setNumber(messageNum)
                .setSmallIcon(R.drawable.pngreceivedtextmessage)
                .setLargeIcon(largeIcon)
                .setGroup(GROUP_KEY_EMAILS)
                .setGroupSummary(true)
                .build();

        notificationManager.notify(0, summaryNotification);
    }

    messageNum++;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    _button = (Button) findViewById(R.id.button);
    _button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CreateNotification();
        }
    });
}

我的目标是SDK 23并尝试了许多不同的组合,但没有任何效果。有没有人知道如何生成摘要通知,仍然可以使用抬头通知工作?

2 个答案:

答案 0 :(得分:3)

在Android 6.0中,通知/摘要通知的显示方式略有变化。如果您不断重复发送大量通知,如果连续通知之间的持续时间非常短,则通知系统不会显示抬头显示。

为了确认这一点,首先将此代码添加到if语句中的第二个通知构建器中(代码中缺少这个代码,以便将其显示为高优先级并带有警报):

.setPriority(Notification.PRIORITY_HIGH)
.setDefaults(Notification.DEFAULT_ALL)

然后在每几秒钟后测试发出通知(让之前的抬头通知消失,然后等待几秒钟)。如果你正确的话,你应该看到抬头显示器,并在每次通知时都有警报。

如果您开始重复发送通知,并且非常快速的单挑不会出现。等待1-2分钟,然后再发出,然后它会出现在单挑中。

答案 1 :(得分:1)

我的猜测是,因为您在调用0时重新使用硬编码的notificationManager.notify(0, summaryNotification);作为notificationId - 系统可能会忽略进一步的更新

尝试添加增量ID:

MainActivity班级

  1. 添加字段private static int lastNotificationId = 0;
  2. 使用notificationManager.notify(MainActivity.lastNotificationId++, summaryNotification);
  3. 中的动态ID

    我自己没有在你的代码上尝试过,但我记得我过去曾遇到类似的问题,并以这种方式解决了。