第9回 効果的に情報を提示する:連載:Windowsストア・アプリ開発入門(4/7 ページ)
Windowsストアアプリの「タイル」や「トースト通知」などの情報提示手段について学び、「ライブタイル」と「セカンダリタイル」を実装してみよう。
保持データをライブタイル登録クラスに渡すメソッド
さて、上で作ったLiveTileクラスのUpdateLiveTileメソッドを呼び出せば、ライブタイルが登録される。呼び出す側では、保持しているFeedsDataオブジェクトからLiveTileDataオブジェクトのコレクションを作って、それを渡せばよい(次のコード)。
private void OnLoadDataCompleted(object sender, EventArgs e)
{
var feedsData = App.Current.Resources["feedsDataSource"] as DataModel.FeedsData;
// 保持しているデータから、ライブタイルのために必要なデータを取り出す。
// =「お気に入り」以外のフィードの、フィードタイトルと記事タイトル
var liveTileDataList
= feedsData.Feeds
.Where(f => f.Title != "お気に入り") // 「お気に入り」は除外する
.Select(f =>
{
var tileData = new Tile.LiveTileData()
{
FeedTitle = f.Title // フィードのタイトルをセット
};
foreach(var item in f.Items)
tileData.ArticleTitles.Add(item.Title); // 記事のタイトルをセット
return tileData;
});
// ライブタイルを登録する
Tile.LiveTile.UpdateLiveTile(liveTileDataList);
}
このメソッドは「App.xaml.cs」ファイルに記述する。
メソッド名が「OnLoadDataCompleted」とイベントハンドラーのものになっていることについては、この後すぐ説明する。
ライブタイルを登録するためのイベントを追加する
上のメソッドは、いつ実行すればよいだろうか? RSSフィードをダウンロードした直後に実行したい。そこで今回は、ダウンロードが完了したところでイベントを発生させ、それを受けて上のメソッドを呼び出すようにしてみよう。
まず、DataLoaderクラス(プロジェクトのLogicフォルダーの「DataLoader.cs」ファイル)に、公開するイベントとそれをトリガーするコードを次のように追加する。
public class DataLoader
{
// データのロードが完了したときに起動されるイベント
public static event EventHandler LoadCompleted;
// イベントをトリガーするメソッド
private static void OnLoadCompleted()
{
var handler = LoadCompleted;
if (handler != null)
handler.Invoke(null, EventArgs.Empty);
}
……省略……
//【第7回】リロードする
internal static async void ReloadStart(DataModel.FeedsData feedsData)
{
……省略……
await LoadAsync(feedsData);
// データのロードが完了したときにイベントを起動する
OnLoadCompleted();
}
//【第6回】データを取得する
internal static async void LoadStart(DataModel.FeedsData feedsData)
{
await LoadAsync(feedsData);
//【第8回】ローミング・フォルダーのファイルから読み込んだ「お気に入り」を追加する
var favoriteFeed = await Logic.FavoriteStorage.GetFavoriteFeedAsync();
feedsData.Feeds.Add(favoriteFeed);
// データのロードが完了したときにイベントを起動する
OnLoadCompleted();
}
……省略……
太字の部分を追加する。
このLoadCompletedイベントを受けてライブタイルの登録が行われるように、イベントハンドラーを「App.xaml.cs」ファイルで追加する(次のコード)。
protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
……省略……
if (rootFrame == null)
{
//【第9回】データのロードが完了したときのイベントハンドラーを登録する
Logic.DataLoader.LoadCompleted += this.OnLoadDataCompleted;
……省略……
太字の部分を追加する。
アプリの起動時に、LoadCompletedイベントハンドラーをセットする。
これで、RSSフィードのダウンロードが完了したときに、前述のOnLoadDataCompletedメソッドが呼び出される。
以上で、ライブタイルの実装は完成である。アプリの起動時にAppクラスのOnLaunchedメソッド内でイベントハンドラーを登録し、RSSフィードのダウンロードが完了するたびに発生するイベントを受けて、ライブタイルの登録処理が実行される。
ライブタイルをテストする
ライブタイルはVS 2013付属のシミュレーターでは動作しないため、実機で確認しなければならない。また、正しいコードのはずなのにライブタイルが表示されないことがある。そのときはWindowsを再起動してみてほしい。
どうにもうまくいかないときは、スケジュールされた通知の実装を試してみる手もある。スケジュールされた通知では、キューに入っている通知を取得できるのだ。
ライブタイルがうまく動かないときは、次のドキュメントも参照してほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.