しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

ライブタイル用ライブラリ NotificationsExtensions を利用する

http://matatabi-ux.hateblo.jp/entry/2014/08/20/120000 で中断状態の対応を行ったタイマーアプリについて、さらにライブタイルでタイマー時間を表示することにしました

f:id:matatabi_ux:20140817200600p:plain

素でライブタイル更新用のコードを書いてもよいですが少し冗長なコードになっているので、Microsoft のサンプルコードにあるライブラリを利用することにします

まずは Windows 8 App tiles and badges sample in C#, C++, JavaScript for Visual Studio 2013 のページにてライブラリが含まれるサンプルコードをダウンロードして開きます

f:id:matatabi_ux:20140817200732p:plain

NotificationsExtensions というプロジェクトがあるので、そのプロパティを開きます

f:id:matatabi_ux:20140817200821p:plain

「署名」欄の「アセンブリに署名する」にチェックを入れ自己署名のキーファイルを新規作成します

キーファイルの名前は適当でパスワードがなくてもよいです

署名が終わったら「Release」で NotificationsExtensions プロジェクトをビルドして bin/Release フォルダ配下に生成される「NotificationsExtensions.winmd」と「NotificationsExtensions.pri」をお目当てのアプリから参照させます

f:id:matatabi_ux:20140817201302p:plain

今回は 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 アプリの場合分けが必要ですが、こんな感じで比較的かんたんにライブタイルを更新するコードが書けます

f:id:matatabi_ux:20140817201703p:plain

無事ライブタイルで残り時間を表示できるようになりました