次の方法で共有


センサー ドライバー イベントについて

アプリケーションがセンサーから情報を受信する方法は 2 つあります。つまり、特定のプロパティまたはデータ フィールドを要求することで同期的に取得する方法と、センサー ドライバーにより生成されるイベントをサブスクライブすることで非同期的に受信する方法です。

センサー ドライバーは、デバイスが新しい動作状態に移行したことをアプリケーションに通知する状態変更イベント、およびその他の種類のイベント通知を生成することができます。ドライバーでは、デバイスが提供するセンサーごとに個別のイベントを生成できます。

  センサー イベントの生成には、IWDFDevice::PostEvent を使用しないでください。センサー プラットフォームは、このようなイベントを、接続されているクライアント プログラムに転送しません。

状態変更イベント

センサー ドライバーは、センサー クラス拡張の ISensorClassExtension::PostStateChange メソッドを呼び出すことにより、状態変更イベントを生成します。たとえば、センサーの初期化を完了したドライバーは、このメソッドを呼び出して、SENSOR_STATE_READY という名前の新しい SensorState 値を通知します。

その他のイベント

センサー ドライバーは、センサー クラス拡張の ISensorClassExtension::PostEvent メソッドを呼び出すことで、その他すべての種類のイベントを生成します。このメソッドは、動作状態とは無関係なセンサー イベントを生成するための汎用的で拡張可能な方法を提供します。PostEvent のそれぞれの呼び出しには、IPortableDeviceValuesCollection へのポインターが含まれます。このコレクション内の各 IPortableDeviceValues**** オブジェクトには、イベントの種類を示す SENSOR_EVENT_PARAMETER_EVENT_ID プロパティの GUID 値、およびイベント データを格納するオプションのデータ フィールド値が含まれます。たとえば、新しい市街データを保持する GPS ドライバーは、SENSOR_EVENT_DATA_UPDATED イベント ID を使用して、文字列値を SENSOR_DATA_TYPE_CITY プロパティ キーに提供します。

ドライバーがイベントを送信した後、センサー クラス拡張はそのイベントおよび関連付けられたデータを Sensor API に転送します。

プラットフォーム定義の定数の定義は、Sensors.h という名前のファイル内にあります。プラットフォーム定義のセンサー定数の詳細については、「定数」を参照してください。

センサー ドライバー イベントの管理

ドライバーでイベントを生成して送信するには、イベント要求を受け入れる前に、個別のスレッドを作成する必要があります。スレッドは、頻度の高いイベント プロシージャによる同期プロシージャ (データ要求コールバックなど) のブロックの回避に役立ちます。データ更新イベントを生成するスレッド クラスの例については、「データ更新イベントの生成」を参照してください。

センサーでイベントを生成する必要があるのは、1 つ以上のクライアント アプリケーションがイベント通知を要求した場合だけです。アプリケーションがイベント通知 (状態変更イベントの通知など) を要求すると、センサー クラス拡張は ISensorDriver::OnClientSubscribeToEvents を介してドライバーに通知します。このメソッドは、アプリケーションを識別する IWDFFile ポインター、およびアプリケーションによるイベント通知要求の対象のセンサーを識別する文字列を提供します。一意識別子として IWDFFile ポインターを使用すると、イベントをサブスクライブしたアプリケーションの追跡に役立ちます。センサーでは特定クライアント宛てのイベントは生成できませんが、SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL、SENSOR_PROPERTY_CHANGE_SENSITIVITY などの特定プロパティに対して、どのアプリケーションがどの値を設定したかを追跡することが必要になる場合があります。

たとえば、複数のクライアント アプリケーションが SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL に対して異なる値を設定している場合、イベント頻度を、要求された最短の間隔に設定する規則を適用できます。ただし、新しいクライアントがイベントをサブスクライブするたびに、または既存のクライアントがサブスクライブ解除するたびに、センサーで間隔を調整する必要がある場合があります。レポート間隔の詳細 (サンプル コードを含む) については、「レポート間隔の管理」を参照してください。

センサー イベントとデータの機密性

他のデータ要求と同様に、イベント通知の要求は、センサー クラス拡張を使用することでセキュリティ保護されます。クラス拡張により、ユーザーに承認されたクライアント アプリケーションだけがイベントの要求やイベント データの受信を行うことができます。

注意  センサーのすべての I/O 要求の処理で、必ずセンサー クラス拡張を使用してください。これにより、ユーザーの個人情報が公開される可能性はより低くなります。

データの機密性の詳細については、「Sensor and Location プラットフォームのプライバシーとセキュリティ」を参照してください。

参照

センサー プロパティ