Xamarin Android在一段时间后取消后台通知

时间:2017-08-01 11:13:58

标签: android firebase xamarin notifications firebase-cloud-messaging

作为我的作业的一部分我想删除已收到但在一段时间后未与之互动的通知。这意味着如果在这段时间后通知仍在通知托盘中,应用程序将自动将其删除。

对于前景通知,这不是问题,因为我应用了以下代码:

    void SendNotification(RemoteMessage remotemessage)
    {
        var intent = new Intent(this, typeof(MainActivity));
        intent.AddFlags(ActivityFlags.ClearTop);
        var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
        long[] pattern = { 100, 100, 100, 100 };

        var notificationBuilder = new Notification.Builder(this)
            .SetVibrate(pattern)
            .SetSmallIcon(Resource.Drawable.mhu2)
            .SetContentTitle(remotemessage.GetNotification().Title)
            .SetContentText(remotemessage.GetNotification().Body)
            .SetAutoCancel(true)
            .SetContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager)GetSystemService(Context.NotificationService);

        int id = 0;

        notificationManager.Notify(id, notificationBuilder.Build());

        Handler handler = new Handler(Looper.MainLooper);

        long delayInMilliseconds = 5000;

        handler.PostDelayed(new Runnable(() => notificationManager.Cancel(id)), delayInMilliseconds);
    }

收到通知后,会在5秒后自动删除(通知调试)。但是,众所周知,根据应用程序的状态,通知的处理方式不同。

此代码适用于前台应用,但在应用在后台或被杀时永远不会运行。因此,当用户在未打开应用程序或在后台收到通知时,通知将不会被删除。

我试图通过在覆盖OnDestroy / OnStop / OnPause状态时执行代码来查看此内容并看到部分解决方案,但在应用程序从未打开时仍然无法删除通知。

非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

我只想发布一个快速更新,因为我已经能够解决这个问题。

Android根据通知中提供的内容处理不同的通知。我发现,如果通知仅使用数据字段构建(因此没有通知主体),则无论应用程序的状态如何,都将始终触发OnMessageReceived()。我意识到的计时器将触发前景,背景和应用程序关闭状态。唯一一次不起作用的是应用程序被强制停止,但在我的上下文中这不会导致问题。