バックグラウンド タスクによるシステム イベントへの応答Respond to system events with background tasks

重要な APIImportant APIs

SystemTrigger イベントに応答するバックグラウンド タスクを作成する方法について説明します。Learn how to create a background task that responds to SystemTrigger events.

このトピックは、既にアプリにバックグラウンド タスク クラスが作られており、システムがトリガーするイベント (インターネットの可用性が変わる、ユーザーがログインするなど) に応じてこのタスクを実行する必要があることを前提としています。This topic assumes that you have a background task class written for your app, and that this task needs to run in response to an event triggered by the system such as when internet availability changes or the user logging in. ここでは、主に SystemTrigger クラスについて扱います。This topic focuses on the SystemTrigger class. バックグラウンド タスク クラスの作成について詳しくは、「インプロセス バックグラウンド タスクの作成と登録」または「アウトプロセス バックグラウンド タスクの作成と登録」をご覧ください。More information on writing a background task class is available in Create and register an in-process background task or Create and register an out-of-process background task.

SystemTrigger オブジェクトを作るCreate a SystemTrigger object

アプリ コードで新規の SystemTrigger オブジェクトを作ります。In your app code, create a new SystemTrigger object. 1 つ目のパラメーター triggerType には、このバックグラウンド タスクをアクティブ化するシステム イベント トリガーの種類を指定します。The first parameter, triggerType, specifies the type of system event trigger that will activate this background task. イベントの種類の一覧については、「SystemTriggerType」をご覧ください。For a list of event types, see SystemTriggerType.

2 つ目のパラメーター OneShot では、次回システム イベントが発生したときに一度だけバックグラウンド タスクを実行するか、それともタスクの登録が解除されるまで、システム イベントが発生するたびにバックグラウンド タスクを実行するかを指定します。The second parameter, OneShot, specifies whether the background task will run only once the next time the system event occurs or every time the system event occurs until the task is unregistered.

次のコードでは、インターネットが利用可能になるたびにバックグラウンド タスクを実行するように指定しています。The following code specifies that the background task runs whenever the Internet becomes available:

SystemTrigger internetTrigger = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
Windows::ApplicationModel::Background::SystemTrigger internetTrigger{
    Windows::ApplicationModel::Background::SystemTriggerType::InternetAvailable, false};
SystemTrigger ^ internetTrigger = ref new SystemTrigger(SystemTriggerType::InternetAvailable, false);

バックグラウンド タスクの登録Register the background task

バックグラウンド タスクの登録関数を呼び出してバックグラウンド タスクを登録します。Register the background task by calling your background task registration function. バックグラウンド タスクの登録について詳しくは、「バックグラウンド タスクの登録」をご覧ください。For more information on registering background tasks, see Register a background task.

次のコードは、アウトプロセスで実行されるバックグラウンド プロセスのバックグラウンド タスクを登録するものです。The following code registers the background task for a background process that runs out-of-process. ホスト アプリと同じプロセスで実行されるバッグラウンド タスクを呼び出す場合は、entrypoint を設定しません。If you were calling a background task that runs in the same process as the host app, you would not set entrypoint:

string entryPoint = "Tasks.ExampleBackgroundTaskClass"; // Namespace name, '.', and the name of the class containing the background task
string taskName   = "Internet-based background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" }; // don't set for in-process background tasks.
std::wstring taskName{ L"Internet-based background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass"; // don't set for in-process background tasks
String ^ taskName   = "Internet-based background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);

注意

ユニバーサル Windows プラットフォーム アプリを呼び出す必要があります RequestAccessAsync バック グラウンドのトリガーの種類のいずれかを登録する前にします。Universal Windows Platform apps must call RequestAccessAsync before registering any of the background trigger types.

更新プログラムのリリース後にユニバーサル Windows アプリが引き続き適切に実行されるようにするには、更新後にアプリが起動する際に、RemoveAccessRequestAccessAsync の順に呼び出す必要があります。To ensure that your Universal Windows app continues to run properly after you release an update, you must call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. 詳しくは、「バックグラウンド タスクのガイドライン」をご覧ください。For more information, see Guidelines for background tasks.

注意

バックグラウンド タスクの登録パラメーターは登録時に検証されます。Background task registration parameters are validated at the time of registration. いずれかの登録パラメーターが有効でない場合は、エラーが返されます。An error is returned if any of the registration parameters are invalid. バックグラウンド タスクの登録が失敗するシナリオをアプリが適切に処理するようにします。タスクを登録しようとした後で、有効な登録オブジェクトを持っていることを前提として動作するアプリは、クラッシュする場合があります。Ensure that your app gracefully handles scenarios where background task registration fails - if instead your app depends on having a valid registration object after attempting to register a task, it may crash.  

注釈Remarks

バックグラウンド タスクの登録動作を確認するには、バックグラウンド タスクのサンプルをダウンロードしてください。To see background task registration in action, download the background task sample.

バックグラウンド タスクは、SystemTrigger イベントと MaintenanceTrigger イベントに応答して実行できます。ただし、その場合もアプリケーション マニフェストでバックグラウンド タスクを宣言する必要があります。Background tasks can run in response to SystemTrigger and MaintenanceTrigger events, but you still need to Declare background tasks in the application manifest. どの種類のバックグラウンド タスクを登録する場合でも、その前に RequestAccessAsync も呼び出す必要があります。You must also call RequestAccessAsync before registering any background task type.

アプリでは、TimeTriggerPushNotificationTriggerNetworkOperatorNotificationTrigger の各イベントに応答するバックグラウンド タスクを登録することにより、アプリがフォアグラウンドにない場合でも、ユーザーとリアルタイムに通信できるようになります。Apps can register background tasks that respond to TimeTrigger, PushNotificationTrigger, and NetworkOperatorNotificationTrigger events, enabling them to provide real-time communication with the user even when the app is not in the foreground. 詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。For more information, see Support your app with background tasks.