我正在尝试像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并尝试了许多不同的组合,但没有任何效果。有没有人知道如何生成摘要通知,仍然可以使用抬头通知工作?
答案 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
班级
private static int lastNotificationId = 0;
notificationManager.notify(MainActivity.lastNotificationId++, summaryNotification);
我自己没有在你的代码上尝试过,但我记得我过去曾遇到类似的问题,并以这种方式解决了。