次の方法で共有


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

Von Bedeutung

デバイス メタデータは非推奨となり、Windows の今後のリリースで削除される予定です。 この機能の置き換えについては、「 ドライバー パッケージ コンテナー メタデータ」を参照してください。

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

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

カスタム USB デバイス サンプルのデバイス バックグラウンド タスクの主な部分は次のとおりです。

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

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

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

フォアグラウンド アプリ

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

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

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

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

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

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

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

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

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

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

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

      Von Bedeutung

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

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

    Von Bedeutung

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

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

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

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

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

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

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

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

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

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