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 デバイス サンプルのデバイス バックグラウンド タスクの主な部分は次のとおりです。
IoSyncBackgroundTaskクラスは、Windows バックグラウンド タスク インフラストラクチャに必要なIBackgroundTaskインターフェイスを実装します。IoSyncBackgroundTaskクラスは、IoSyncBackgroundTaskクラスの Run メソッド内のクラスに渡されたDeviceUseDetailsインスタンスを取得し、このインスタンスを使用して Microsoft Store アプリに進行状況を報告し、取り消しイベントに登録します。IoSyncBackgroundTaskクラスの Run メソッドは、バックグラウンド デバイス同期コードを実装するプライベートOpenDeviceメソッドとWriteToDeviceAsyncメソッドも呼び出します。
フォアグラウンド アプリ
カスタム USB デバイス サンプルのフォアグラウンド アプリは、DeviceUseTrigger を使用するデバイスのバックグラウンド タスクを登録してトリガーします。 このセクションでは、デバイスのバックグラウンド タスクの登録、トリガー、および進行状況の処理にフォアグラウンド アプリが実行する手順の概要について説明します。
カスタム USB デバイス サンプルのフォアグラウンド アプリは、デバイスのバックグラウンド タスクを使用するために次の手順を実行します。
新しい DeviceUseTrigger オブジェクトと
BackgroundTaskRegistrationオブジェクトを作成します。このアプリによって以前に登録されたバックグラウンド タスクがあるかどうかを確認し、タスクの BackgroundTaskRegistration.Unregister メソッドを呼び出してキャンセルします。
プライベート
SetupBackgroundTaskメソッドは、デバイスと同期するバックグラウンド タスクを登録します。SetupBackgroundTaskメソッドは、次の手順でSyncWithDeviceAsyncメソッドから呼び出されます。DeviceUseTriggerを初期化し、後で使用できるように保存します。新しい
BackgroundTaskBuilderオブジェクトを作成し、そのName、TaskEntryPoint、およびSetTriggerプロパティとメソッドを使用して、アプリのDeviceUseTriggerオブジェクトとバックグラウンド タスク名を登録します。BackgroundTaskBuilderオブジェクトのTaskEntryPointプロパティは、バックグラウンド タスクがトリガーされたときに実行されるバックグラウンド タスク クラスの完全な名前に設定されます。フォアグラウンド アプリが完了と進行状況の更新をユーザーに提供できるように、バックグラウンド タスクからの完了イベントと進行状況イベントを登録します。
プライベート
SyncWithDeviceAsyncメソッドは、デバイスと同期するバックグラウンド タスクを登録し、バックグラウンド同期を開始します。前の手順の
SetupBackgroundTaskメソッドを呼び出し、デバイスと同期するバックグラウンド タスクを登録します。バックグラウンド タスクを開始するプライベート
StartSyncBackgroundTaskAsyncメソッドを呼び出します。 このメソッドは、アプリのハンドルをデバイスに閉じて、バックグラウンド タスクが起動時にデバイスを開くことができるようにします。Von Bedeutung
バックグラウンド タスクでは、更新を実行するためにデバイスを開く必要があるため、フォアグラウンド アプリは、
RequestAsyncを呼び出す前にデバイスへの接続を閉じる必要があります。
次に、
StartSyncBackgroundTaskAsyncメソッドは、DeviceUseTriggerオブジェクトのRequestAsyncメソッドを呼び出します。このメソッドは、バックグラウンド タスクをトリガーし、バックグラウンド タスクが正常に開始されたかどうかを判断するために使用RequestAsyncからDeviceTriggerResultsオブジェクトを返します。Von Bedeutung
Windows では、必要なすべてのタスク開始ポリシー チェックが完了していることを確認します。 すべてのポリシー チェックが完了した場合、更新操作はフォアグラウンド アプリの外部でバックグラウンド タスクとして実行され、操作の進行中にアプリを安全に中断できます。 また、Windows はランタイム要件を適用し、それらの要件が満たされなくなった場合はバックグラウンド タスクを取り消します。
最後に、
SyncWithDeviceAsyncメソッドは、StartSyncBackgroundTaskAsyncから返されたDeviceTriggerResultsオブジェクトを使用して、バックグラウンド タスクが正常に開始されたかどうかを判断します。 switch ステートメントは、次の結果を検査するために使用されます。DeviceTriggerResultsフォアグラウンド アプリは、デバイスのバックグラウンド タスクからの進行状況でアプリ UI を更新するプライベート
OnSyncWithDeviceProgressイベント ハンドラーを実装します。フォアグラウンド アプリは、バックグラウンド タスクが完了したときにバックグラウンド タスクからフォアグラウンド アプリへの移行を処理するプライベート
OnSyncWithDeviceCompletedイベント ハンドラーを実装します。BackgroundTaskCompletedEventArgsオブジェクトのCheckResultsメソッドを使用して、バックグラウンド タスクによって例外がスローされたかどうかを判断します。フォアグラウンド アプリでは、バックグラウンド タスクが完了し、UI が更新されてユーザーに通知されたので、アプリで使用するためにデバイスが再度開きます。
フォアグラウンド アプリは、UI からプライベート ボタン クリック イベント ハンドラーを実装して、バックグラウンド タスクを開始および取り消します。
プライベート
Sync_Clickイベント ハンドラーは、前の手順で説明したSyncWithDeviceAsyncメソッドを呼び出します。プライベート
CancelSync_Clickイベント ハンドラーは、プライベートCancelSyncWithDeviceメソッドを呼び出してバックグラウンド タスクを取り消します。
プライベート
CancelSyncWithDeviceメソッドは、 BackgroundTaskRegistration.Unregister メソッドを使用してデバイスを再度開くことができるように、アクティブなデバイスの同期を登録解除して取り消します。