방법: Windows Phone의 타일 업데이트 예약

2012-02-09

이 항목에서는 ShellTileSchedule을 사용하여 응용프로그램 타일의 배경 이미지를 업데이트하는 데 필요한 단계에 대해 설명합니다. ShellTileSchedule은 보조 타일을 업데이트하는 데도 사용됩니다. Windows Phone의 타일 개요에는 타일 속성 및 타일을 업데이트하는 데 사용할 수 있는 다양한 메서드에 대한 정보가 나와 있습니다.

팁팁:

타일 앞면의 배경 이미지는 ShellTileSchedule을 사용하여 업데이트할 수 있는 유일한 속성입니다.

전체 샘플은 Windows Phone용 코드 샘플에서 찾을 수 있습니다.

ShellTileSchedule을 사용하면 타일의 배경 이미지를 업데이트할 일회성 또는 반복 일정을 설정할 수 있습니다. 이 일정은 응용프로그램이 활성 상태가 아니더라도 계속 실행됩니다. 또한 ShellTileSchedule은 응용프로그램에서 실행되는 일정을 중지하는 데도 사용할 수 있습니다. 응용프로그램은 ShellTileSchedule에 대한 설정을 저장하고 응용프로그램이 시작될 때마다 일정을 시작해야 합니다. 일정에 오류가 발생하면 응용프로그램이 실행되고 있지 않더라도 일정을 취소할 수 있기 때문입니다.

ShellTileSchedule 샘플은 4개의 버튼이 있는 간단한 프로그램입니다. 4개의 버튼이 담당하는 기능은 다음과 같습니다.

  1. 타일을 한 번 업데이트합니다.

  2. 타일을 무한정 업데이트하는 일정을 만듭니다.

  3. 타일을 특정 횟수만큼 업데이트하는 일정을 만듭니다.

  4. 실행 중인 일정을 중지합니다.

AP_Tiles_TileScheduleSample
참고참고:

타일 업데이트를 기능적으로 테스트하려면 응용프로그램의 응용프로그램 타일을 시작 화면에 고정하십시오.

응용프로그램 UI 만들기

  1. Windows Phone용 Visual Studio 2010 Express에서 파일 | 새 프로젝트 메뉴 명령을 사용하여 새 프로젝트를 만듭니다.

  2. 새 프로젝트 창이 표시됩니다. Visual C# 템플릿을 확장하고 Windows Phone용 Silverlight 템플릿을 선택합니다.

  3. Windows Phone 응용프로그램 템플릿을 선택합니다. 선택한 이름을 이름에 입력합니다.

  4. 확인을 클릭합니다. 새 Windows Phone 응용프로그램 창이 표시됩니다.

  5. 대상 Windows Phone OS 버전 메뉴에서 Windows Phone OS 7.1이 선택되었는지 확인합니다.

  6. 확인을 클릭합니다. 새 프로젝트가 생성되고 MainPage.xaml이 Visual Studio 디자이너 창에서 열립니다.

  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. 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, 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. 디버그 | 디버깅 시작 메뉴 명령을 선택하여 응용프로그램을 실행합니다.

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

표시: