WinRT实时图块徽章更新

时间:2013-01-15 19:57:14

标签: windows-8 notifications windows-runtime tile badge

我目前正在使用HTML5 / JavaScript中的Feed阅读器应用程序,我遇到了活动切片的问题。 我有一个实时磁贴,通过查询从博客返回最新3篇文章的Web服务定期更新。 实时磁贴按预期工作,但我想创建一个徽章通知,显示未读文章。

我想到的方法是查看磁贴是否更新,然后从徽章通知中增加数字。当用户启动应用时,徽章将被清除。

我使用以下代码行:

    var notifications = Windows.UI.Notifications;
    var polledUri = new Windows.Foundation.Uri("http://my_url/feed.php");
    var recurrence = notifications.PeriodicUpdateRecurrence.halfHour;
    var tileUpdater = notifications.TileUpdateManager.createTileUpdaterForApplication()
    tileUpdater.startPeriodicUpdate(polledUri, recurrence);

这会创建每隔半小时更新一次的实时磁贴。我的问题是:我想在每次PeriodicUpdate发生时创建徽章更新。我使用以下代码:

    var badgeType = notifications.BadgeTemplateType.badgeNumber;
    var badgeXml = notifications.BadgeUpdateManager.getTemplateContent(badgeType);
    var badgeAttributes = badgeXml.getElementsByTagName("badge");
    var tileUpdater = notifications.TileUpdateManager.createTileUpdaterForApplication()
    tileUpdater.startPeriodicUpdate(polledUri, recurrence);
    // this is where my problem is
    // if (tileUpdater.update() == true) -> This line is not correct: how can I catch the update event?
    //badgeAttributes[0].setAttribute("value", currentValue + 1);
    var badgeNotification = new notifications.BadgeNotification(badgeXml);
    notifications.BadgeUpdateManager.createBadgeUpdaterForApplication().update(badgeNotification);

我想捕获该tileUpdater.startPeriodicUpdate函数的更新事件并增加徽章的值。我怎样才能做到这一点?我到处搜索,我找不到答案。

感谢您的帮助 Julian Atanasoae

2 个答案:

答案 0 :(得分:2)

即使您可以检测到周期性磁贴更新已经发生(我很确定您不能),但大多数情况下,当您的应用未运行时,它会发生。因此,您必须通过“本地通知”设置徽章更新的代码将不会执行。事实上,徽章只会在应用程序位于前台时更新,并且会定期发出通知(这不是那么有趣,因为您的应用程序位于前台,无论如何都看不到该区域!)。

听起来你想通过在徽章中显示来更新磁贴的次数? (请注意,最多只能使用99,最大徽章编号)

我也说使用徽章的定期通知,并且该定期更新的URL端点可以是接受唯一标识客户端的查询字符串参数的服务。然后,您的服务将为该客户端生成正确的徽章通知,方法是递增客户端特定的值,即维护服务器端。

即使这样,你也会有两个定期通知,一个用于瓷砖,一个用于徽章,虽然你可以按相同的间隔安排它们,但是当它们到达时仍然存在潜在的偏差,直到距离所需时间15分钟。

答案 1 :(得分:0)

这个问题有两个解决方案:

1)我为徽章更新创建了定期通知,并且我为Web服务上的每个客户端存储了GUID。此解决方案适用于未大量使用的应用程序(2000个以下的用户),因为XML文件会变得太大,并且Web服务必须为每个客户端增加很多值。

2)我创建了一个带有计时器的后台任务,我每15分钟检查一次更新。

儒略