エクスポート (0) 印刷
すべて展開

方法: Windows Phone のタイルの更新をスケジュールする

2012/02/09

このトピックでは、ShellTileSchedule を使用してアプリケーション タイルの背景イメージを更新するために必要な手順について説明します。ShellTileSchedule を使用してセカンダリ タイルを更新することもできます。「Windows Phone のタイルの概要」では、タイルのプロパティおよびタイルを更新するために使用できるさまざまなメソッドについて説明しています。

ヒントヒント:

ShellTileSchedule を使用して更新できるプロパティは、タイルの前面の背景イメージだけです。

この完成したサンプルについては、「Windows Phone のコード サンプル」を参照してください。

ShellTileSchedule を使用すると、タイルの背景イメージを 1 回だけ、または繰り返し更新するスケジュールを設定できます。スケジュールは、アプリケーションがアクティブではない場合でも実行し続けます。アプリケーションに対して実行されているスケジュールを停止する場合も、ShellTileSchedule を使用します。アプリケーションが実行していなくてもスケジュール内の障害によってスケジュールが取り消される可能性があるので、アプリケーションでは、ShellTileSchedule の設定を保存しておき、アプリケーションが起動されるたびにスケジュールを開始する必要があります。

ShellTileSchedule のサンプルは、4 つのボタンがある簡単なプログラムです。4 つのボタンがは次のとおりです。

  1. タイルを 1 回だけ更新します。

  2. スケジュールを作成し、タイルを無期限に更新します。

  3. スケジュールを作成し、タイルを特定の回数だけ更新します。

  4. 実行しているスケジュールを停止します。

AP_Tiles_TileScheduleSample
注注:

タイルの更新機能をテストするには、アプリケーションのアプリケーション タイルをスタート画面に追加してください。

アプリケーションの UI を作成する

  1. Visual Studio 2010 Express for Windows Phone で、[ファイル] メニューの [新しいプロジェクト] をクリックして新しいプロジェクトを作成します。

  2. [新しいプロジェクト] ウィンドウが表示されます。Visual C# のテンプレートを展開してから、Silverlight for Windows Phone のテンプレートを選択します。

  3. Windows Phone アプリケーション テンプレートを選択します。[名前] に選択した名前を入力します。

  4. [OK] をクリックします。[新しい Windows Phone アプリケーション] ウィンドウが表示されます。

  5. [Windows Phone OS のターゲット バージョン] メニューで、[Windows Phone OS 7.1] が選択されていることを確認します。

  6. [OK] をクリックします。新しいプロジェクトが作成され、Visual Studio のデザイナー ウィンドウに MainPage.xaml が表示されます。

  7. MainPage.xaml で、次のコードを使用して ContentPanel という名前の Grid を置き換えます。これにより、UI の 4 つのボタンが作成されます。

            <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. using ディレクティブを MainPage.xaml.cs ファイルの先頭に追加し、ShellTileSchedule を含む名前空間の名前を指定します。

    using Microsoft.Phone.Shell;
    
    
  2. スケジュールと状態の変数を宣言して初期化します。

     
    public partial class MainPage : PhoneApplicationPage
    {
        ShellTileSchedule SampleTileSchedule = new ShellTileSchedule();
        bool TileScheduleRunning = false;
    
    
    
  3. 更新を 1 回だけ行うコードを追加します。

    
    private void buttonOneTime_Click(object sender, RoutedEventArgs e)
    {
        // Update will happen one time.
        SampleTileSchedule.Recurrence = UpdateRecurrence.Onetime;
    
        // Start the update schedule now, but because updates are batched, the update may not happen for an hour or so.
        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 時間程度かかることがあります。デバイスがロックされているとユーザーが更新が見ないので、更新は行われません。

アプリケーションを実行してデバッグするには

  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();
}

表示:
© 2014 Microsoft