kazuakix の日記

Windows Phone とか好きです

セカンダリ タイルからの起動を判別する方法 (2)

うわっ... 今日のネタ考えてなかった... と思ったら @biac さんから宿題が出題されていました。

@biac さん、ありがとうございます。
 
えーっと... まずセカンダリ タイルは作るときに必ず何らかのパラメータを指定する必要があるので この内容をチェックすることでセカンダリ タイルからの起動であると判断することができます。

そして Windows ランタイムのセカンダリ タイルは Silverlight のように表示するページ名を持っていないため、表示するページへは App.xaml.cs の OnLaunched の中で遷移させてやる必要があります。

なので セカンダリ タイルからの起動であっても常に MainPage (最初のページ) を表示させたいのであれば、単に昨日のコードで SubPage へ遷移している部分を MainPage に変更してしまえばいいと思います。

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;

    if (rootFrame == null)
    {
        // (省略)
    }

    if (rootFrame.Content == null)
    {
        // 新たに起動された場合

        // (省略)
        
        //if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
        //{
        //    throw new Exception("Failed to create initial page");
        //}
        rootFrame.Navigate(typeof(MainPage), e.Arguments);
        }
    }
    else
    {
        // 中断から呼び出された場合
        if (!string.IsNullOrEmpty(e.Arguments))
        {
            // 引数あり = セカンダリタイルからの起動
            // rootFrame.Navigate(typeof(SubPage), e.Arguments);
            rootFrame.Navigate(typeof(MainPage), e.Arguments);
        }
     }
    
    Window.Current.Activate();
}

これでセカンダリ タイルから起動した場合でも必ず MainPage に遷移するが、アプリ中断時に通常起動した場合は中断前の画面から再開するという状態になっているのではないかと思います。

@biac さん、いかがでしょうか?