読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Phoneで分離ストレージの画像をタイルに表示する

Windows Phone

Windows Phone OS 7.1からローカルだけで、タイル画像が変更出来るようになりました(WP OS 7.0はPushでのみタイル画像の変更が可能)。

分離ストレージの画像をタイルの背景に適用する場合、あらかじめ画像を「isostore:/Shared/ShellContent/」へ書き込んでおく必要があります。

    // タイル用パスへ書き込む(アプリ領域->共有領域)
    var store = IsolatedStorageFile.GetUserStoreForApplication();
    using (var reader = store.OpenFile("tile.jpg", System.IO.FileMode.Open))
    using (var writer = store.CreateFile("Shared/ShellContent/tile.jpg")) {
        reader.WriteTo(writer);
        var bytes = new byte[256 * 1024];
        while (true) {
	    int read = reader.Read(bytes, 0, bytes.Length);
	    if (read <= 0) break;
	    writer.Write(bytes, 0, read);
        }
    }

    // アクティブなタイルからアプリ自分自身のタイルを取得
    var myTile = ShellTile.ActiveTiles.ToObservable().First();
    if (myTile != null) {
        // タイル情報を生成
        var tile = new StandardTileData {
            BackgroundImage = new Uri("isostore:/Shared/ShellContent/tile.jpg", UriKind.Absolute),
            Title = "某時計",
            BackContent = "タイルの裏12345678901234567890",
            BackTitle = " 裏のタイトル"
        };
        // アプリタイルを更新
        myTile.Update(tile);
    }

上記のコードを実行すると、ホーム画面のタイルにはこんな感じで表示されます。

裏にはこんな感じで表示されます。大体イメージつきますでしょうか。BackContentに設定した「タイルの裏12345678901234567890」が全て表示出来ずに2行目で切れてしまっています。


(追記)既にアプリ内に保存している画像を表示する場合

既にアプリ内に保存している画像を表示する場合は、isostore:/Shared/ShellContent/の代わりにappdata:/Background.pngなど、appdataスキーマを使用すると良いでしょう。コードとしては以下のようになります。