酢ろぐ!

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

デバッグビルド時かつエミュレータで動く時のみ、カメラロールにテスト画像を追加する

個人的なメモ。

Windows Phone 7ではPhotoChooserTaskを使用しても、サンプル画像がいくつか入った「7」フォルダにかありません。少し画像処理アプリを作る上では少しもの足りません。

デバッグビルド時かつエミュレータで動く時のみ、カメラロールに画像を追加する処理を書きました。あらかじめsample.jpgという画像が、コンテンツとしてプロジェクトに追加されていることを前提としています。

実行中のデバイスの名前は、Microsoft.Phone.Info名前空間のDeviceStatusクラスのDeviceNameプロパティで取得することが可能です。エミュレータで実行している場合は「XDeviceEmulator」と返ってきます。

アプリ起動時に実行されるApp.xaml.csのApplication_Launchingメソッドにて、以下の処理を実行します。「既にテスト画像を追加したかどうか」のフラグと実行されているデバイスの名前で判定をおこない、エミュレータでの場合のみプロジェクト内のサンプル画像をカメラロールへ追加します。

// (たとえば、[スタート] メニューから) アプリケーションが起動するときに実行されるコード
// このコードは、アプリケーションが再アクティブ化済みの場合には実行されません
private void Application_Launching(object sender, LaunchingEventArgs e)
{
#if DEBUG
    var isComplited = Softbuild.Data.Settings.Get<bool>("ImplementTestData", false);

    var deviceName = Microsoft.Phone.Info.DeviceStatus.DeviceName;
    if (!isComplited && deviceName == "XDeviceEmulator")
    {
        using (var media = new Microsoft.Xna.Framework.Media.MediaLibrary())
        {
            var res2 = App.GetResourceStream(new Uri("sample.jpg", UriKind.Relative));
            media.SavePictureToCameraRoll("sample.jpg", res2.Stream);
        }

        Softbuild.Data.Settings.Set("ImplementTestData", true);
    }
#endif
}

注意:Softbuild.Data名前空間のSettingsクラスは俺俺ライブラリなので、適当に永続的な設定保存/読み込み処理に読み替えてください。