Windows 8.1 におけるデバイス バックグラウンド タスクの作成 (UWP デバイス アプリ)

Windows 8.1 では、UWP アプリを使って周辺機器上でデータを同期できます。 アプリがデバイス メタデータに関連付けられている場合、その UWP デバイス アプリは、ファームウェア更新などのデバイス更新を実行することもできます。 このトピックでは、DeviceUseTrigger または DeviceServicingTrigger を使用するデバイス バックグラウンド タスクを作成する方法について説明します。 これらのトリガーを使用するデバイス バックグラウンド エージェントには、ユーザーの同意を確保したり、デバイスの同期時と更新時にバッテリ寿命の維持に役立ったりするポリシーが適用されます。 デバイス バックグラウンド タスクの詳細については、「UWP デバイス アプリのデバイスの同期と更新」を参照してください。

Note

このトピックは、カスタム USB デバイスのサンプルに対応しています。 カスタム USB デバイスのサンプルは、DeviceUseTrigger とのデバイス同期を実行するバックグラウンド タスクを示します。

カスタム USB デバイスのサンプルのデバイス バックグラウンド タスクには DeviceUseTrigger が用意されていますが、このトピックで説明する内容はすべて、DeviceServicingTrigger を使用するデバイス バックグラウンド タスクにも適用できます。 2 つのトリガーを使用する際の唯一の違いは、Windows で実行されるポリシー確認です。

アプリ マニフェスト

デバイス バックグラウンド タスクを使用するには、システムによってトリガーされるバックグラウンド タスクに対して行われるように、フォアグラウンド アプリのアプリ マニフェスト ファイルでアプリがそれを宣言する必要があります。 詳しくは、「UWP デバイス アプリのデバイスの同期と更新」を参照してください。

アプリ パッケージ マニフェスト ファイルのこの例では、DeviceLibrary.SyncContent はフォアグラウンド アプリからのエントリ ポイントです。 DeviceLibrary.SyncContent は、DeviceUseTrigger を使用するバックグラウンド タスクのエントリ ポイントです。

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

デバイス バックグラウンド タスク

デバイス バックグラウンド タスク クラスは IBackgroundTask インターフェイスを実装し、周辺機器を同期または更新するために作成する実際のコードを含みます。 バックグラウンド タスク クラスは、バックグラウンド タスクがトリガーされたときに、アプリのアプリケーション マニフェストで指定されたエントリ ポイントから実行されます。

カスタム USB デバイスのサンプルのデバイス バックグラウンド クラスには、DeviceUseTrigger バックグラウンド タスクを使用して USB デバイスとの同期を実行するコードが含まれています。 詳細については、サンプルをダウンロードしてください。 IBackgroundTask の実装と Windows のバックグラウンド タスク インフラストラクチャの詳細については、「バックグラウンド タスクでのアプリのサポート」を参照してください。

カスタム USB デバイスのサンプルのデバイス バックグラウンド タスクの主要部分には、次のようなものがあります。

  1. IoSyncBackgroundTask クラスは、Windows バックグラウンド タスク インフラストラクチャで必要な IBackgroundTask インターフェイスを実装します。

  2. クラスは IoSyncBackgroundTask 、クラスの DeviceUseDetails Run メソッド内のクラスに渡されたインスタンスを IoSyncBackgroundTask 取得し、このインスタンスを使用して進行状況を Microsoft Store アプリに報告し、キャンセル イベントに登録します。

  3. IoSyncBackgroundTask クラスの Run メソッドは、バックグラウンド デバイス同期コードを実装するプライベートの OpenDevice メソッドと WriteToDeviceAsync メソッドも呼び出します。

フォアグラウンド アプリ

カスタム USB デバイスのサンプルのフォアグラウンド アプリは、DeviceUseTrigger を使用するデバイス バックグラウンド タスクを登録してトリガーします。 このセクションでは、フォアグラウンド アプリがデバイス バックグラウンド タスクの登録、トリガー、および進行状況処理のために実行する手順について概要を説明します。

カスタム USB デバイスのサンプルのフォアグラウンド アプリは、デバイス バックグラウンド タスクを使用するために次の手順を実行します。

  1. 新しい DeviceUseTriggerBackgroundTaskRegistration オブジェクトを作成します。

  2. このアプリで以前登録されたバックグラウンド タスクがあるかどうかを確認し、タスクの BackgroundTaskRegistration.Unregister メソッドを呼び出してそれらをキャンセルします。

  3. プライベート SetupBackgroundTask メソッドは、デバイスと同期するバックグラウンド タスクを登録します。 SetupBackgroundTask メソッドは、次の手順で SyncWithDeviceAsync メソッドから呼び出されます。

    1. DeviceUseTrigger を初期化し、後で使用するために保存します。

    2. 新しい BackgroundTaskBuilder オブジェクトを作成し、その NameTaskEntryPointSetTrigger の各プロパティとメソッドを使用して、アプリの DeviceUseTrigger オブジェクトとバックグラウンド タスク名を登録します。 BackgroundTaskBuilder オブジェクトの TaskEntryPoint プロパティは、バックグラウンド タスクがトリガーされたときに実行されるバックグラウンド タスク クラスの完全な名前に設定されます。

    3. バックグラウンド タスクからの完了イベントと進行状況イベントを登録し、フォアグラウンド アプリが完了と進行状況の更新をユーザーに提供できるようにします。

  4. プライベート SyncWithDeviceAsync メソッドは、デバイスと同期するバックグラウンド タスクを登録して、バックグラウンド同期を開始します。

    1. 前の手順から SetupBackgroundTask メソッドを呼び出し、デバイスと同期するバックグラウンド タスクを登録します。

    2. バックグラウンド タスクを開始するプライベート StartSyncBackgroundTaskAsync メソッドを呼び出します。 このメソッドは、デバイスへのアプリのハンドルを閉じて、バックグラウンド タスクが開始時にデバイスを開くことができるようにします。

      重要

      バックグラウンド タスクは更新を実行するためにデバイスを開く必要があるため、フォアグラウンド アプリは RequestAsync を呼び出す前にデバイスへの接続を閉じる必要があります。

    次に、StartSyncBackgroundTaskAsync メソッドは、バックグラウンド タスクのトリガーを開始する DeviceUseTrigger オブジェクトの RequestAsync メソッドを呼び出し、バックグラウンド タスクが正常に開始されたかどうかを判断するために使用した DeviceTriggerResults から RequestAsync オブジェクトを返します。

    重要

    Windows は、必要なタスク開始ポリシー確認がすべて完了していることを確認します。 すべてのポリシー確認が完了すると、更新操作がフォアグラウンド アプリの外部でバックグラウンド タスクとして実行され、操作の進行中にアプリを安全に中断できるようになります。 Windows はランタイム要件も適用し、それらの要件が満たされなくなった場合はバックグラウンド タスクを取り消します。

  5. 最後に、SyncWithDeviceAsync メソッドは DeviceTriggerResults から返された StartSyncBackgroundTaskAsync オブジェクトを使用して、バックグラウンド タスクが正常に開始されたかどうかを判断します。 switch ステートメントは、DeviceTriggerResults からの結果を検査するために使用されます。

  6. フォアグラウンド アプリは、デバイスのバックグラウンド タスクからの進行状況をアプリ UI に反映して更新するプライベート OnSyncWithDeviceProgress イベント ハンドラーを実装します。

  7. フォアグラウンド アプリは、バックグラウンド タスクが完了したときに、バックグラウンド タスクからフォアグラウンド アプリへの移行を処理するプライベート OnSyncWithDeviceCompleted イベント ハンドラーを実装します。

    1. CheckResults オブジェクトの BackgroundTaskCompletedEventArgs メソッドを使用して、バックグラウンド タスクによって例外がスローされたかどうかを判断します。

    2. フォアグラウンド アプリは、バックグラウンド タスクが完了すると、アプリで使用できるようにデバイスを再度開き、UI を更新してユーザーに通知します。

  8. フォアグラウンド アプリは、UI からプライベート ボタン クリック イベント ハンドラーを実装して、バックグラウンド タスクを開始および取り消します。

    1. プライベート Sync_Click イベント ハンドラーは、前の手順で説明した SyncWithDeviceAsync メソッドを呼び出します。

    2. プライベート CancelSync_Click イベント ハンドラーは、プライベート CancelSyncWithDevice メソッドを呼び出してバックグラウンド タスクを取り消します。

  9. プライベート CancelSyncWithDevice メソッドは、BackgroundTaskRegistration.Unregister メソッドを使用してデバイスを再度開くことができるように、アクティブなデバイスの同期を登録解除して取り消します。

カスタム USB デバイス サンプル

UWP デバイス アプリによるデバイスの同期と更新

Launching, resuming, and multitasking

バックグラウンド タスクによるアプリのサポート