棒棒糖:单击时取消抬头通知

时间:2014-11-06 18:19:28

标签: android

我已经搜索了很长时间,但我无法找到答案。我的应用会显示Notification.PRIORITY_HIGH的通知,这会使其显示为棒棒糖的抬头通知。

问题在于,当点击通知本身(即启动其contentIntent)时,即使Notification.FLAG_AUTO_CANCEL 设置且通知已{{}},也会自动清除通知{1套。我尝试了各种标志组合,包括Notification.FLAG_NO_CANCEL,但行为保持不变。

我希望通知成为“正常”通知,而不是被取消...有关如何解决此问题的任何想法?文档在这个问题上根本不清楚......

重现的代码:

Notification.FLAG_ONGOING_EVENT

编辑:我注意到,当发布通知的应用程序位于前台时,通知会成为常规通知,就像我期望的那样。向前滑动抬头通知(无论当前的前台应用程序如何)也会产生定期通知。

2 个答案:

答案 0 :(得分:2)

目前,我已经提出了以下解决方案:

  1. 在contentIntent中添加一个额外内容,表示它是从通知中启动的。
  2. 在已启动的Activity
  3. 中检查该额外内容
  4. 如果存在额外费用,请重新发布通知,但请确保该通知不会成为提前通知。
  5. 代码:

    @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_HIGHMAX,你的通知是重要的它说这是一个需要立即处理的紧急情况。因此,在这种情况下,用户只能选择通过向左或向右滑动(通知不会出现在通知抽屉中)或点击通知本身开始contentIntent(会导致什么)来解除它通知因为您的意图采取行动而消失)。

如果有办法避免这种行为,对我来说这将是新的。

希望我能帮忙