Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Windows 10 TPのUniversal application platformで別アプリ起動時にパラメータを渡す

$
0
0
Windows 10 TP時点の情報です

以下の記事の続きです。

Windows 10 TPのUniversal application platformで別アプリを起動する - かずきのBlog@hatenaokazuki.hatenablog.com

アプリを起動するだけでは、連携としては弱いので値を渡したいと思います。起動時にURIを指定できるのでURIのパラメータとして渡してもいいですが、もう少し高レベルなAPIが提供されています。 ValueSetというDicitonary<string, object>のようなクラスがあって、そいつに値をつっこんでLauncher.LaunchUriAsyncの第三引数につっこむことで相手にデータを渡すことが出来ます。 コードは以下のようになります。

private async void Button_Click(object sender, RoutedEventArgs e)
{
    var options = new LauncherOptions();
    options.TargetApplicationPackageFamilyName = "c190bbea-586b-461b-a523-9fcd05e6233c_a892ers4d9s3w";
    var data = new ValueSet();
    data["Name"] = "okazuki";
    await Launcher.LaunchUriAsync(new Uri("sampleapp:"), options, data);
}

受け取り側は、ProtocolActivatedEventArgsのDataプロパティから値を取得できます。以下のコード例では、MainPageの画面遷移の引数としてわたしています。

protectedoverridevoid OnActivated(IActivatedEventArgs args)
{
    var e = args as ProtocolActivatedEventArgs;
    if (e == null) { return; }

    Frame rootFrame = Window.Current.Content as Frame;

    // Do not repeat app initialization when the Window already has content,// just ensure that the window is activeif (rootFrame == null)
    {
        // Create a Frame to act as the navigation context and navigate to the first page
        rootFrame = new Frame();
        // Set the default language
        rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];

        rootFrame.NavigationFailed += OnNavigationFailed;

        if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
        {
            //TODO: Load state from previously suspended application
        }

        // Place the frame in the current Window
        Window.Current.Content = rootFrame;
    }

    if (rootFrame.Content == null)
    {
        // When the navigation stack isn't restored navigate to the first page,// configuring the new page by passing required information as a navigation// parameter
        rootFrame.Navigate(typeof(MainPage), e.Data["Name"]);
    }
    // Ensure the current window is active
    Window.Current.Activate();
}

結構お手軽にアプリ間連携ができるようになってますね。


Viewing all articles
Browse latest Browse all 1387

Trending Articles