SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習 Windowsストアアプリケーション

Windowsストアアプリのバックグラウンド処理

速習 Windowsストアアプリケーション 第9回

2. 追加したプロジェクトを元プロジェクトの参照に追加する

 バックグラウンドタスクの処理を記述する前に、処理を行うプロジェクト(追加したプロジェクト)を元のプロジェクトの参照に追加します。

 元のプロジェクトの「参照設定」を右クリック→「参照の追加」をクリックします。

 新しく追加したプロジェクトをチェックして参照に追加します。

追加したプロジェクトを参照に加える
追加したプロジェクトを参照に加える

3. 追加したプロジェクトのコードを修正する

 追加したプロジェクトのClass1.csを、以下のように修正します。

タイルのローカル更新
public sealed class Class1 : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

        // タイムゾーンの変更を保存する
        var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        localSettings.Values["text"] = String.Format("タイムゾーンが{0}に変更されました", TimeZoneInfo.Local.DisplayName);

        deferral.Complete();
    }
}

 バックグランドでタイムゾーンを取得して保存しています。

 今回はタイムゾーンの変更をトリガーとしたTimeZoneChangeを利用するつもりなので、これで変更されたタイムゾーンをバックグラウンドで取得して保存できます。

4. マニフェストファイルを修正する

 元のプロジェクト(ストアアプリ側)のマニフェストファイル(Package.appxmanifest)の宣言タブに、バックグラウンドタスクを追加します。

 左側の「使用可能な宣言」からバックグラウンドタスクを選択し、「追加」をクリックします。

 「サポートされる宣言」に追加されたバックグラウンドタスクをクリックした状態で、プロパティを変更します。

 サポートされるタスクの種類の「システムイベント」にチェックを入れて、エントリポイントにプロジェクト名.Class1と入力します。今回は新しく追加したプロジェクト名を「BackgroundTask」としましたので、エントリポイントには「BackgroundTask.Class1」と入力しました。

マニフェストファイルの修正
マニフェストファイルの修正

5.バックグラウンドタスクの呼び出し処理を追加する

 最後にバックグラウンドタスクを呼び出す処理を、元のプロジェクト(ストアアプリのプロジェクト)に追加します。

 MainPage.xaml.csを以下のように書き換えます。

タイルのローカル更新
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    /// <summary>
    /// このページがフレームに表示されるときに呼び出されます。
    /// </summary>
    /// <param name="e">このページにどのように到達したかを説明するイベント データ。Parameter 
    /// プロパティは、通常、ページを構成するために使用します。</param>
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // 現在のタイムゾーンを表示する
        this.TimeZoneText.Text = TimeZoneInfo.Local.DisplayName;

        // バックグラウンドタスクでタイムゾーンが変更されていたら取得する
        var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        string str = localSettings.Values["text"] as string;

        this.bgTimeZoneChangeText.Text = str;

        // すでに登録してあるバックグラウンドタスクをいったん削除
        if (BackgroundTaskRegistration.AllTasks.Count > 0)
        {
            foreach (var task in BackgroundTaskRegistration.AllTasks)
            {
                task.Value.Unregister(true);
            }
        }

        // トリガーを設定する
        var trigger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);
        var builder = new BackgroundTaskBuilder();

        builder.Name = "SampleTask";
        builder.TaskEntryPoint = "BackgroundTask.Class1";
        builder.SetTrigger(trigger);

        builder.Register();
    }
}

次のページ
バックグラウンドでのオーディオ再生

この記事は参考になりましたか?

速習 Windowsストアアプリケーション連載記事一覧

もっと読む

この記事の著者

西村 誠(ニシムラ マコト)

 Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7329 2013/08/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー