Windows Phone 8自定义每小时范围Live Tile更新频率

时间:2014-04-25 10:35:40

标签: windows-phone-8 windows-phone background-process live-tile background-transfer

当我在寻找答案时,我只遇到了越来越频繁地寻找更新应用程序实时图块的方法的开发人员。我想要反其道而行。

看我正在开发一个天气应用程序,我希望它每小时更新一次,但仅针对特定的小时范围。也就是说,我不希望用户能够每小时更新一次磁贴,因为1)人们睡觉,2)我正在使用的API仅对每天的前1,000次呼叫是免费的。换句话说,用户不需要每小时更新一次,无论如何我都无法给他们提供选择。

例如,有可能让实时磁贴从早上8点到晚上11点每小时更新一次,并且从晚上12点到早上7点不进行任何通话吗?

1 个答案:

答案 0 :(得分:0)

如果您在ScheduledAgent中调用API,只需将调用包装在检查时间的if块中。我有类似的需要每天更新一次瓷砖(这是直到圣诞节的倒计时)。

此代码位于我的ScheduledAgent.cs文件中。它会检查日期(应仅在12月和26日之前触发)并设置倒计时,然后仅在圣诞节早晨发送一个Toast通知。它应该是如何在后台任务中将API调用限制为设置的dat时间的一个很好的例子。

if (DateTime.Now.Month == 12 && DateTime.Now.Day < 26)
{
    //number of days until the 25th
    var countdown = ((new DateTime(DateTime.Now.Year, 12, 25).DayOfYear) - DateTime.Now.DayOfYear);

    if (secondaryTile != null)
    {
        var imageString = "/Images/Tiles/" + countdown + ".png";
        var newTileData = new StandardTileData
        {
            BackgroundImage = new Uri(imageString, UriKind.Relative)
        };
        secondaryTile.Update(newTileData);
    }

    var now = DateTime.Now;
    if (now.Day == 25 && now.TimeOfDay.Hours == 9 && (now.TimeOfDay.Minutes > 14 && now.TimeOfDay.Minutes < 46))
    {
        var toast = new ShellToast { Title = "Xmas Countdown", Content = "Merry Xmas! Thank you for using 'Quick Xmas List' and have a safe holiday!" };
        toast.Show();
    }
}