在固定的时间间隔更新实时磁贴,而无需运行应用

时间:2013-02-11 02:51:10

标签: windows-8 microsoft-metro winjs live-tile

如何使用JavaScript以固定间隔(例如半天)更新应用的实时磁贴?

此外,它必须能够更新,即使应用程序本身没有运行(例如天气应用程序)

编辑:我想在本地更新它而无需连接到互联网。请在JavaScript中给出一些例子,而不是C#请!

更具体地说,例如,如何设置磁贴每天更新一次,显示当前日期?

5 个答案:

答案 0 :(得分:4)

如果磁贴上的内容将成为日期,则计划磁贴更新是一个不错的选择(请参阅MSDN上的ScheduledTileNotificationJavaScript Scheduled notifications sample)。您可以安排每天进行一次通知,并以日期作为内容。

如果您可以提供Web服务,定期更新将是一个不错的选择。使用此方法,无论应用程序是否正在运行,都将以固定间隔更新磁贴。或者,您可以使用推送,或使用后台任务更新磁贴。

MSDN有一篇关于选择正确的通知传递机制的文章,以及相关代码示例的链接:http://msdn.microsoft.com/en-us/library/windows/apps/hh779721.aspx

答案 1 :(得分:2)

您可以按计划使用后台任务,间隔时间超过15分钟。这些任务旨在由与您的应用程序分开的操作系统运行,因此如果它不活动或打开,将执行。 以下是有关后台任务入门的详细博文:http://www.silverlightshow.net/items/Windows-8-metro-make-your-app-alive-with-background-tasks.aspx

答案 2 :(得分:1)

注册一个执行12小时的后台任务并更新你的平铺。

var RegisterBackgroundTask = function (taskEntryPoint, taskName, trigger, condition) {
    UnregisterTask(taskName);
    Windows.ApplicationModel.Background.BackgroundExecutionManager.requestAccessAsync();

    var TaskBuilder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();

    TaskBuilder.name = taskName;
    TaskBuilder.taskEntryPoint = taskEntryPoint;
    TaskBuilder.setTrigger(trigger);

    if (condition !== null) {
        TaskBuilder.addCondition(condition);
        // If the condition changes while the background task is executing then it will be canceled.
        TaskBuilder.cancelOnConditionLoss = true;
    }

    var task = TaskBuilder.register();

    // Remove previous completion status from local settings.
    var settings = Windows.Storage.ApplicationData.current.localSettings;
    settings.values.remove(taskName);
};

var UnregisterBackgroundTask = function (sTaskName) {
    var iter = Windows.ApplicationModel.Background.BackgroundTaskRegistration.allTasks.first();
    var hascur = iter.hasCurrent;
    while (hascur) {
        var cur = iter.current.value;
        if (cur.name === sTaskName) {
            cur.unregister(true);
        }
        hascur = iter.moveNext();
    }
}

像这样注册任务:

RegisterTask(
                    "App_JS\\LiveTileTask.js",
                    "Task.LiveTileTask",
                    new Windows.ApplicationModel.Background.TimeTrigger(15, false),
                    new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.internetAvailable));  // 15 min are minimum

在专门的文件" LiveTileTask.js"您编写了Live Tile更新程序的代码:

(function () {
    "use strict";

    importScripts("//Microsoft.Phone.WinJS.2.1/js/base.js");
    var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;

    var Notifications = Windows.UI.Notifications;
    var tileUpdateManager = Notifications.TileUpdateManager.createTileUpdaterForApplication();
    tileUpdateManager.clear();
    tileUpdateManager.enableNotificationQueue(true);

    for (var i = 0; i < 6; i++) {
        var tileWideXml = Notifications.TileUpdateManager.getTemplateContent(Notifications.TileTemplateType.tileSquare150x150Text04),
            tileAttributes = tileWideXml.getElementsByTagName("text");
        tileAttributes[0].appendChild(tileWideXml.createTextNode("My Live Tile Text No. " + i));

        var currentTime = new Date(),
            dueTime = new Date(currentTime.getTime() + 30),
            tileNotification = new Notifications.ScheduledTileNotification(xmlTile, dueTime),
            tileUpdater = Notifications.TileUpdateManager.createTileUpdaterForApplication();

        tileUpdater.addToSchedule(tileNotification);
    }

    backgroundTaskInstance.succeeded = true;
    close();
})();

最后不要忘记在appxmanifest中注册backgroundtask。根据&#34;声明&#34;选择&#34;后台任务&#34;并激活&#34;计时器&#34;并设置&#34;起始页&#34;到&#34; App_JS \ LiveTileTask.js&#34;。这样你就可以更新你的Tile。

答案 3 :(得分:0)

您使用Azure和推送通知向所有应用用户发送通知:http://msdn.microsoft.com/en-us/library/windows/apps/hh465460.aspx

答案 4 :(得分:0)

我建议您创建 Azure移动服务。它非常简单和便宜,意味着您可以获得单独的推送服务的所有优势(而不是设备上的预定磁贴通知)来发送您的推送通知但没有完成所有工作。如果您愿意,可以免费注册并免费创建10个移动服务。您只需创建一个移动服务,然后创建一个每12小时运行一次的计划脚本,并在脚本中编写一些服务器端JavaScript代码来执行您的操作。这只是移动服务为您提供的一项内容。您还可以获得数据,身份验证等。 www.windowsazure.com