kazuakix の日記

Windows Phone とか好きです

Windows Phone 8.1 で URI プロトコル呼び出しに対応する (2)

以前 URI プロトコル呼び出しに対応する方法を調べました。


この時はアプリから Web に飛んで また戻ってくるという仕組みだったので問題なかったのですが、別アプリから URI を受け取って新しくアプリを起動しようとするとうまく動きませんでした。
 
とりあえず OnActivated で OnLaunched と同様に Frame を作成して Window.Current.Activate() を実行することで無事動作するようになりました。

private Frame CreateRootFrame()
{
    var rootFrame = Window.Current.Content as Frame;
    if (rootFrame == null)
    {
        rootFrame = new Frame
        {
            Language = ApplicationLanguages.Languages[0],
            CacheSize = 1 
        };
        Window.Current.Content = rootFrame;
    }
    if (rootFrame.Content == null)
    {
#if WINDOWS_PHONE_APP
        // スタートアップのターンスタイル ナビゲーションを削除します。
        if (rootFrame.ContentTransitions != null)
        {
            _transitions = new TransitionCollection();
            foreach (var c in RootFrame.ContentTransitions)
            {
                _transitions.Add(c);
            }
        }

        rootFrame.ContentTransitions = null;
        rootFrame.Navigated += RootFrame_FirstNavigated;
#endif
    }

    return rootFrame;
}

protected override void OnActivated(IActivatedEventArgs args)
{
    base.OnActivated(args);
    
    if (args.Kind != ActivationKind.Protocol) return;
    var paeArgs = args as ProtocolActivatedEventArgs;
    if (paeArgs == null) return;
    var uri = paeArgs.Uri;
    var rootFrame = CreateRootFrame();
    rootFrame.Navigate(typeof(NextPage), paeArgs.Uri);
    Window.Current.Activate();
}

 
サンプルプログラム を見るともう少しややこしい事をしているようですが、とりあえず動いたのでメモ代わりに。