我目前正在使用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
答案 0 :(得分:2)
即使您可以检测到周期性磁贴更新已经发生(我很确定您不能),但大多数情况下,当您的应用未运行时,它会发生。因此,您必须通过“本地通知”设置徽章更新的代码将不会执行。事实上,徽章只会在应用程序位于前台时更新,并且会定期发出通知(这不是那么有趣,因为您的应用程序位于前台,无论如何都看不到该区域!)。
听起来你想通过在徽章中显示来更新磁贴的次数? (请注意,最多只能使用99,最大徽章编号)
我也说使用徽章的定期通知,并且该定期更新的URL端点可以是接受唯一标识客户端的查询字符串参数的服务。然后,您的服务将为该客户端生成正确的徽章通知,方法是递增客户端特定的值,即维护服务器端。
即使这样,你也会有两个定期通知,一个用于瓷砖,一个用于徽章,虽然你可以按相同的间隔安排它们,但是当它们到达时仍然存在潜在的偏差,直到距离所需时间15分钟。
答案 1 :(得分:0)
这个问题有两个解决方案:
1)我为徽章更新创建了定期通知,并且我为Web服务上的每个客户端存储了GUID。此解决方案适用于未大量使用的应用程序(2000个以下的用户),因为XML文件会变得太大,并且Web服务必须为每个客户端增加很多值。
2)我创建了一个带有计时器的后台任务,我每15分钟检查一次更新。
儒略