http://matatabi-ux.hateblo.jp/entry/2014/08/20/120000 で中断状態の対応を行ったタイマーアプリについて、さらにライブタイルでタイマー時間を表示することにしました
素でライブタイル更新用のコードを書いてもよいですが少し冗長なコードになっているので、Microsoft のサンプルコードにあるライブラリを利用することにします
まずは Windows 8 App tiles and badges sample in C#, C++, JavaScript for Visual Studio 2013 のページにてライブラリが含まれるサンプルコードをダウンロードして開きます
NotificationsExtensions というプロジェクトがあるので、そのプロパティを開きます
「署名」欄の「アセンブリに署名する」にチェックを入れ自己署名のキーファイルを新規作成します
キーファイルの名前は適当でパスワードがなくてもよいです
署名が終わったら「Release」で NotificationsExtensions プロジェクトをビルドして bin/Release フォルダ配下に生成される「NotificationsExtensions.winmd」と「NotificationsExtensions.pri」をお目当てのアプリから参照させます
今回は Shared プロジェクトに InfrastructureAssemblies フォルダを作り、そこに配置して参照しました
あとはこのライブラリを利用してライブタイル更新のコードを書くだけ!
/// <summary> /// ライブタイルを更新する /// </summary> private void UpdateLiveTile() { var time = TimeSpan.FromSeconds(this.ViewModel.TimerValue).ToString(@"h\:mm\:ss"); var updater = TileUpdateManager.CreateTileUpdaterForApplication(); updater.EnableNotificationQueue(true); updater.Clear(); // タイマー完了時は非表示 if (!this.ViewModel.IsTimerStated || this.ViewModel.TimerValue < 1) { updater.EnableNotificationQueue(false); return; } var tile1 = NotificationsExtensions.TileContent.TileContentFactory.CreateTileSquare150x150Text01(); tile1.Branding = TileBranding.Logo; tile1.TextHeading.Text = time; var tile2 = NotificationsExtensions.TileContent.TileContentFactory.CreateTileWide310x150Text01(); tile2.Branding = TileBranding.Logo; tile2.TextHeading.Text = time; tile2.Square150x150Content = tile1; #if WINDOWS_APP var tile3 = NotificationsExtensions.TileContent.TileContentFactory.CreateTileSquare310x310Text01(); tile3.Branding = TileBranding.Logo; tile3.TextHeading.Text = time; tile3.Wide310x150Content = tile2; updater.Update(tile3.CreateNotification()); #endif #if WINDOWS_PHONE_APP updater.Update(tile2.CreateNotification()); #endif }
Windows アプリと Phone アプリの場合分けが必要ですが、こんな感じで比較的かんたんにライブタイルを更新するコードが書けます
無事ライブタイルで残り時間を表示できるようになりました