2013-01-15 43 views
1

我目前正在研究HTML5/JavaScript中的圖片閱讀器應用程序,並且我遇到了活動圖塊的問題。 我有一個活動磁貼,通過查詢返回博客最新3篇文章的Web服務定期更新。 活動圖塊按預期工作,但我想創建一個徽章通知來顯示未讀文章。WinRT活動圖塊徽章更新

我認爲這樣做的方式是查看圖塊是否更新,然後從徽章通知中增加數字。當用戶啓動應用程序時,徽章將被清除。

我用下面的代碼行:

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

即使您可以檢測到發生週期性磁貼更新(我敢肯定,您不能),它會在您的應用程序未運行時發生大部分時間。因此,您必須通過「本地通知」設置徽章更新的代碼不會執行。事實上,徽章只會在應用程序處於前景時纔會更新,並且會定期發出通知(這並不是那麼有趣,因爲您的應用程序在前景中無法看到拼貼!)。

這聽起來像你想通過顯示在徽章中的瓦片更新次數? (請注意,最多隻能使用99,最大徽章數量)

我想說也使用徽章的定期通知,並且該定期更新的URL端點可能是接受查詢的服務字符串參數唯一標識客戶端。然後,您的服務將爲該客戶端生成正確的徽章通知,方法是增加客戶端特定的值,即維護服務器端。

儘管如此,您還是會發生兩個定期通知,一個用於貼片,另一個用於徽章,雖然您可以將它們安排在相同的時間間隔內,但當它們到達時仍存在潛在的偏差,從預期的時間到15分鐘。

0

有2個解決問題的對策:

1)我創建一個徽章更新定期通知我存儲的GUID對Web服務的每個客戶端。此解決方案適用於不常使用(2000用戶以下)的應用程序,因爲XML文件會變得太大,Web服務將不得不爲每個客戶端增加大量值。

2)我用計時器創建後臺任務,每15分鐘左右檢查一次更新。

朱利安