Delen via


Sensorgegevensvelden ophalen

Belangrijk

Gebruik in plaats daarvan de UWP Sensor-API .

De SENSOR-API op basis van COM is afgeschaft en mag niet worden gebruikt in nieuwe toepassingen. Er zijn geen extra functies of verbeteringen gepland en ondersteuning wordt beperkt.

In dit onderwerp wordt beschreven hoe u gegevens ophaalt van een sensor, synchroon en asynchroon.

Gegevens synchroon ophalen

U kunt sensorgegevens synchroon ophalen door ISensor::GetDataaan te roepen.

Met de volgende voorbeeldcode wordt een sensorgegevensrapport opgehaald en worden vervolgens drie afzonderlijke gegevensveldwaarden opgehaald. De voorbeeldsensor biedt aangepaste gegevens over de huidige lokale tijd in uren, minuten en tweede gegevensvelden. De variabele met de naam pSensor bevat een aanwijzer naar ISensor- die de sensor vertegenwoordigt die de gegevens levert.

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);
    }

Gegevens asynchroon ophalen

U kunt sensorgegevens asynchroon ontvangen door u te registreren voor het ontvangen van de ISensorEvents::OnDataUpdated gebeurtenis. Zie Sensor-API-gebeurtenissen gebruikenvoor meer informatie over het ontvangen van callbacks van sensorevenementen.

In de volgende voorbeeldcode ziet u een implementatie van ISensorEvents::OnDataUpdated waarmee gegevenswaarden worden opgehaald uit het gegevensrapport dat door de gebeurtenis is verstrekt. De voorbeeldsensor biedt aangepaste gegevens over de huidige lokale tijd in uren, minuten en tweede gegevensvelden.

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;
}