別のストアアプリ間のデータ共有は、プロトコルを使う方法や、拡張子を使う方法もある、ってことで、あとで試してみよう > 自分
— Tomoaki Masuda (@moonmile) July 22, 2013
ってことで、ストアアプリ間で通信を行います。共有コントラクトを使うと相手先を選択しないといけないし、デスクトップアプリ経由(WCFサーバー経由)だとアプリのインストールが必要だし、というわけで、ひとまず、手軽なアプリ間通信は「プロトコル」を使えます。まあ、ワンクッションだけなんですけどね。双方向にプロトコルを設定しておけば、それなりに通信はできるかと。
■送信先のアプリ
ターゲットアプリでは、App.xaml.cs でプロトコルを受けます。OnActivated をオーバーライドして、種別がプロトコル ActivationKind.Protocol の時に処理をするという感じです。
ここでは、画面に表示させるために new Frame をしていますが、アプリ内部で処理する場合は、クラス変数にするのがよいかと。
1 2 3 4 5 6 7 8 9 10 11 12 13 | protected override void OnActivated(IActivatedEventArgs args) { if (args.Kind == ActivationKind.Protocol) { var ar = args as ProtocolActivatedEventArgs; var rootFrame = new Frame(); rootFrame.Navigate( typeof (BasicPage)); Window.Current.Content = rootFrame; BasicPage p = rootFrame.Content as BasicPage; p.UpdateMsg(ar.Uri); } Window.Current.Activate(); } |
プロトコル自体は、マニフェストで設定します。
■送信元のアプリ
1 2 3 4 5 6 | private void Button_Click( object sender, RoutedEventArgs e) { string text = this .text1.Text; var ret = Windows.System.Launcher.LaunchUriAsync( new Uri( "mm-message://" + text)); } |
独自に作った「mm-message://」プロトコルを使って、LaunchUriAsync メソッドで呼び出します。ここではテキストしか送っていませんが、ファイル名を送って受信側で処理すれば、ファイルや画像などを送ることも可能です。ファイルに関しては、マイドキュメントを使うとかマイピクチャを使うとかがあるので、まあ、ちょっと細工が必要ですが。
■試してみる
プロトコルなのでURLエンコードをしないと駄目なんですが、通常のアルファベットならばそのまま送ることもできます。
サンプルはこちら
http://sdrv.ms/15cIv1G