我已经搜索了很长时间,但我无法找到答案。我的应用会显示Notification.PRIORITY_HIGH
的通知,这会使其显示为棒棒糖的抬头通知。
问题在于,当点击通知本身(即启动其contentIntent
)时,即使Notification.FLAG_AUTO_CANCEL
未设置且通知已{{}},也会自动清除通知{1套。我尝试了各种标志组合,包括Notification.FLAG_NO_CANCEL
,但行为保持不变。
我希望通知成为“正常”通知,而不是被取消...有关如何解决此问题的任何想法?文档在这个问题上根本不清楚......
重现的代码:
Notification.FLAG_ONGOING_EVENT
编辑:我注意到,当发布通知的应用程序位于前台时,通知会成为常规通知,就像我期望的那样。向前滑动抬头通知(无论当前的前台应用程序如何)也会产生定期通知。
答案 0 :(得分:2)
目前,我已经提出了以下解决方案:
Activity
代码:
@Override
protected void onResume()
{
super.onResume();
if (getIntent().getBooleanExtra("launched_from_notification", false)) {
showNotification(false);
getIntent().putExtra("launched_from_notification", false);
}
}
// If your Activity uses singleTop as launchMode, don't forget this
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
setIntent(intent);
}
private void showNotification(boolean showAsHeadsUp)
{
final Intent intent = getIntent();
intent.putExtra("launched_from_notification", true);
final Notification.Builder nb = new Notification.Builder(this);
nb.setContentTitle("Foobar");
nb.setContentText("I am the content text");
nb.setOngoing(true);
nb.setSmallIcon(android.R.drawable.ic_dialog_info);
nb.setContentIntent(PendingIntent.getActivity(
this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT));
nb.setPriority(Notification.PRIORITY_HIGH);
// Notifications without sound or vibrate will never be heads-up
nb.setDefaults(showAsHeadsUp ? Notification.DEFAULT_ALL : 0);
((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(0, nb.build());
}
答案 1 :(得分:1)
我怎么想象一个简单的伎俩就是说你的contentIntent
做任何动作和再次发送相同的通知,声明为PRIORITY_DEFAULT
或其他什么。当然使用相同的 notyId 。
我前几天遇到了同样的问题...重点是Google已经打算采取这种行为了,这意味着如果你想通知PRIORITY_HIGH
或MAX
,你的通知是重要的它说这是一个需要立即处理的紧急情况。因此,在这种情况下,用户只能选择通过向左或向右滑动(通知不会出现在通知抽屉中)或点击通知本身开始contentIntent
(会导致什么)来解除它通知因为您的意图采取行动而消失)。
如果有办法避免这种行为,对我来说这将是新的。
希望我能帮忙