Xamarin:每秒更新一次通知文本

时间:2017-10-26 14:52:35

标签: android xamarin

这是我的服务类中发生的通知:

    void DispatchNotificationThatServiceIsRunning()
    {
        Notification.Builder notificationBuilder = new Notification.Builder(this)
            .SetSmallIcon(Resource.Drawable.btn_start)
            .SetContentTitle("Count Down Active!")
            .SetContentText(_2TimerRunning._hours.ToString() + _2TimerRunning._minutes.ToString() 
                            + _2TimerRunning._seconds.ToString());

        var notificationManager = (NotificationManager)GetSystemService(NotificationService);
        notificationManager.Notify(1000, notificationBuilder.Build());

    }

这确实有效,但问题是“SetContentText”部分。 此文本仅更新一次,但另一个计时器不断计算大括号内的秒数。不幸的是,这并没有得到更新,即使计时器仍在计数,notificatin总是读取“000000”。

如何每秒更新一次文本,以便通知中会有持续的倒计时?

此外,如何捕获此通知上的点击以再次打开活动?谢谢:)

谢谢!

2 个答案:

答案 0 :(得分:1)

  

Xamarin:每隔一秒更新一次通知文本

您可以创建一个可以帮助您每1秒更新一次通知文本的任务,调用DispatchNotificationThatServiceIsRunning()中的Task.Delay()可以解决重复问题。 :

void DispatchNotificationThatServiceIsRunning()
{
    Task.Delay(1000).ContinueWith(t =>
    {
        Notification.Builder notificationBuilder = new Notification.Builder(this)
            .SetSmallIcon(Resource.Drawable.Icon)
            .SetContentTitle("Count Down Active!")
            .SetContentText(DateTime.Now.ToString("hh:mm:ss"));

        var notificationManager = (NotificationManager)GetSystemService(NotificationService);
        notificationManager.Notify(1000, notificationBuilder.Build());
        DispatchNotificationThatServiceIsRunning();//This is for repeate every 1s.
    }, TaskScheduler.FromCurrentSynchronizationContext());
}

Effect

更新:

您可以使用PendingIntent来实现此功能,添加以下代码:

 Intent notificationIntent = new Intent(ApplicationContext, typeof(Activity2));
 PendingIntent contentIntent = PendingIntent.GetActivity(this, 1, notificationIntent, PendingIntentFlags.UpdateCurrent);
 ...
 notificationBuilder.SetContentIntent(contentIntent).SetAutoCancel(true);

答案 1 :(得分:0)

看起来问题出在_2TimerRunning中,从此对象检索的时间值无效。我能看到的所有其他代码都运行正常。所以我的建议是首先调试该对象。