信息
您所需的主题如下所示。但此主题未包含在此库中。

如何发送 Windows Phone 8 的计划本地磁贴更新

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

本主题介绍了使用 ShellTileSchedule 来更新应用磁贴背景图像的步骤。您还可以使用 ShellTileSchedule 来更新次要磁贴。有关磁贴的更多信息,请参见 Windows Phone 8 的磁贴。您也可以下载完整的 Shell 磁贴计划示例

提示提示:

磁贴正面的背景图像是唯一一个可以使用 ShellTileSchedule 进行更新的属性。

本主题包括以下部分。

您可以使用 ShellTileSchedule 来设置一次性计划或定期计划,以便更新磁贴的背景图像。即使您的应用处于非活动状态,该计划仍然可以继续运行。还可以使用 ShellTileSchedule 来停止为您的应用程序运行的任何计划。每当应用由于计划失败而启动时,应用都应该存储其 ShellTileSchedule 设置并启动该计划,即使应用不再运行,也可以取消计划。

ShellTileSchedule 示例是带有四个按钮的简单程序,用于启动对以下操作的响应。

  • 更新磁贴一次。

  • 创建一个用于无限次地更新磁贴的计划。

  • 创建一个用于将磁贴更新特定次数的计划。

  • 停止正在运行的任何计划。

AP_Tiles_TileScheduleSample
说明注意:

将磁贴固定到“开始”屏幕以测试更新。

创建应用 UI

  1. 创建一个新 Windows Phone 应用。

  2. 在 MainPage.xaml 中,将名为 ContentPanelGrid 替换为以下代码。该代码将为 UI 创建四个按钮。

            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <Button Content="Start One Time Schedule" Height="72" HorizontalAlignment="Center" Margin="38,42,38,0" Name="buttonOneTime" VerticalAlignment="Top" Width="400" Click="buttonOneTime_Click" />
                <Button Content="Start Indefinite Schedule" Height="72" HorizontalAlignment="Center"  Margin="38,120,38,0" Name="buttonIndefinite" VerticalAlignment="Top" Width="400" Click="buttonIndefinite_Click" />
                <Button Content="Start Defined Count Schedule" Height="72" HorizontalAlignment="Center"  Margin="38,198,38,0" Name="buttonDefined" VerticalAlignment="Top" Width="400"  Click="buttonDefined_Click"/>
                <Button Content="Stop Schedule" Height="72" HorizontalAlignment="Center" Margin="38,276,38,0" Name="buttonStop" VerticalAlignment="Top" Width="400" Click="buttonStop_Click" />
            </Grid>
    
    

创建磁贴计划的步骤

  1. 向 MainPage.xaml.cs 文件的顶部添加一个 using 指令并提供包含 ShellTileSchedule 的命名空间的名称。

    using Microsoft.Phone.Shell;
    
    
  2. 声明并初始化用于计划和状态的变量。

     
    public partial class MainPage : PhoneApplicationPage
    {
        ShellTileSchedule SampleTileSchedule = new ShellTileSchedule();
        bool TileScheduleRunning = false;
    
    
    
  3. 添加用于执行一次性更新的代码。

    
    private void buttonOneTime_Click(object sender, RoutedEventArgs e)
    {
        // Update will happen one time.
        SampleTileSchedule.Recurrence = UpdateRecurrence.Onetime;
    
        // Start the update schedule now. 
        SampleTileSchedule.StartTime = DateTime.Now;
    
        SampleTileSchedule.RemoteImageUri = new Uri(@"http://www.weather.gov/forecasts/graphical/images/conus/MaxT1_conus.png");
        SampleTileSchedule.Start();
        TileScheduleRunning = true;
    }
    
    
  4. 添加用于设置运行次数不确定的计划的代码。 请记住,如果该计划失败次数太多,将取消该计划。

    
    private void buttonIndefinite_Click(object sender, RoutedEventArgs e)
    {
        // Updates will happen on a fixed interval. 
        SampleTileSchedule.Recurrence = UpdateRecurrence.Interval;
    
        // Updates will happen every hour.  Because MaxUpdateCount is not set, the schedule will run indefinitely.
        SampleTileSchedule.Interval = UpdateInterval.EveryHour;
    
        SampleTileSchedule.RemoteImageUri = new Uri(@"http://www.weather.gov/forecasts/graphical/images/conus/MaxT1_conus.png");
        SampleTileSchedule.Start();
        TileScheduleRunning = true;
    }
    
    
  5. 添加用于设置某个计划的代码,该计划将更新磁贴无限次。同样,如果该计划失败次数太多,将取消该计划。

    
    private void buttonDefined_Click(object sender, RoutedEventArgs e)
    {
        // Updates will happen on a fixed interval.
        SampleTileSchedule.Recurrence = UpdateRecurrence.Interval;
    
        // Updates will happen every hour.
        SampleTileSchedule.Interval = UpdateInterval.EveryHour;
    
        // Do a maximum of 50 updates and then stop.
        SampleTileSchedule.MaxUpdateCount = 50;
    
        SampleTileSchedule.RemoteImageUri = new Uri(@"http://www.weather.gov/forecasts/graphical/images/conus/MaxT1_conus.png");
        SampleTileSchedule.Start();
        TileScheduleRunning = true;
    }
    
    
  6. 添加用于停止任何正在运行的计划的代码。通过启动计划来附加至计划。

    
    private void buttonStop_Click(object sender, RoutedEventArgs e)
    {
        // Attach to a shell schedule by starting it.
        if (!TileScheduleRunning)
        {
            buttonIndefinite_Click(sender, e);
        }
    
        SampleTileSchedule.Stop();
        TileScheduleRunning = false;
    }
    
    
    

调试更新计划可能具有挑战性。为了省电,将对更新进行批处理,因此可能需要多达约一小时的时间才能看到更新后的图像。当设备锁定时将不会进行更新,因为用户将看不到更新。

运行和调试应用的步骤

  1. 通过选择“调试” | “启动调试”菜单命令运行应用。

  2. 当模拟器初始化并且您的程序正在运行时,按模拟器上的“开始”按键以进入“开始”屏幕。 导航到应用列表并找到您的应用。点击并按住应用名称,然后从上下文菜单中选择“固定到‘开始'屏幕”。应用磁贴便固定到“开始”屏幕。

  3. “后退”按钮返回您的应用。点击应用上的其中一个按钮启动某个计划。

  4. 返回至“开始”屏幕。等待该计划运行,以查看结果。切记此过程最多可能需要一小时,因为更新将分批处理。

    AP_Tiles_TileScheduleResult

尽管该示例没有次要磁贴,但您也可以通过向 ShellTileSchedule 构造函数传递磁贴信息来为次要磁贴设置计划。以下代码示例演示如何为每一个现有磁贴设置计划。

foreach (ShellTile TileToSchedule in ShellTile.ActiveTiles)
{
    ShellTileSchedule mySchedule = new ShellTileSchedule(TileToSchedule);
    mySchedule.Interval = UpdateInterval.EveryHour;
    mySchedule.Recurrence = UpdateRecurrence.Interval;
    mySchedule.RemoteImageUri = imageURI;
    mySchedule.Start();
}

显示: