您可以通过调用 ISensor::GetData 以同步方式检索传感器数据。
下面的示例代码检索传感器数据报告,然后检索三个单独的数据字段值。示例传感器提供有关小时、分钟和秒数据字段中的当前本地时间的自定义数据。名为 pSensor 的变量包含指向 ISensor(表示提供数据的传感器)的指针。
if(SUCCEEDED(hr)) { // Get the data report. hr = pSensor->GetData(&pReport); } if(SUCCEEDED(hr)) { PROPVARIANT var = {}; hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_HOUR, &var); if(SUCCEEDED(hr)) { if(var.vt == VT_UI4) { // Get the hour value. ulHour = var.ulVal; } } PropVariantClear(&var); hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_MINUTE, &var); if(SUCCEEDED(hr)) { if(var.vt == VT_UI4) { // Get the hour value. ulMinute = var.ulVal; } } PropVariantClear(&var); hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_SECOND, &var); if(SUCCEEDED(hr)) { if(var.vt == VT_UI4) { // Get the hour value. ulSecond = var.ulVal; } } PropVariantClear(&var); if(SUCCEEDED(hr)) { // Print the local time to the console window. wprintf_s(L"\nCurrent local time is: \n"); wprintf_s(L"%02d:%02d:%02d (synchronous)\n\n", ulHour, ulMinute, ulSecond); }
您可以通过注册以接收 ISensorEvents::OnDataUpdated 事件,以异步方式检索传感器数据。若要了解如何接收传感器事件回调,请参见使用传感器 API 事件。
下面的示例代码显示从事件提供的数据报告中检索数据值的 ISensorEvents::OnDataUpdated 的实现。示例传感器提供有关小时、分钟和秒数据字段中的当前本地时间的自定义数据。
STDMETHODIMP OnDataUpdated( ISensor *pSensor, ISensorDataReport *pNewData) { HRESULT hr = S_OK; if(NULL == pNewData || NULL == pSensor) { return E_INVALIDARG; } ULONG ulHour = 0; ULONG ulMinute = 0; ULONG ulSecond = 0; PROPVARIANT var = {}; hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_HOUR, &var); if(SUCCEEDED(hr)) { if(var.vt == VT_UI4) { // Get the hour value. ulHour = var.ulVal; } } PropVariantClear(&var); if(SUCCEEDED(hr)) { hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_MINUTE, &var); } if(SUCCEEDED(hr)) { if(var.vt == VT_UI4) { // Get the hour value. ulMinute = var.ulVal; } } PropVariantClear(&var); if(SUCCEEDED(hr)) { hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_SECOND, &var); } if(SUCCEEDED(hr)) { if(var.vt == VT_UI4) { // Get the hour value. ulSecond = var.ulVal; } } PropVariantClear(&var); if(SUCCEEDED(hr)) { // Print wprintf_s(L"Current local time is: \n"); wprintf_s(L"%02d:%02d:%02d (asynchronous)\n", ulHour, ulMinute, ulSecond); } return hr; }