Partilhar via


Verificação dos Campos de Dados de Sensores Suportados

Importante

Em vez disso, use a API do sensor UWP.

A API do sensor baseada em COM foi preterida e não deve ser usada em novos aplicativos. Não estão planeados quaisquer recursos ou melhorias adicionais e o suporte será limitado.

Este tópico descreve como verificar se um sensor pode fornecer um conjunto específico de campos de dados.

Depois de recuperar um objeto de sensor, você pode chamar ISensor::GetSupportedDataFields para determinar se o sensor pode fornecer os dados necessários.

O código de exemplo a seguir cria uma função auxiliar que testa se o sensor pode fornecer todos os três campos de dados de exemplo. A função recebe um ponteiro para um sensor como entrada e retorna um valor booleano, onde VERDADEIRO indica que o sensor pode fornecer todos os campos de dados necessários.

BOOL CheckForSupportedDataFields(ISensor* pSensor)
{
    assert(pSensor);

    HRESULT hr = S_OK;
    DWORD cKeys = 0; // Key count.
    BOOL bRet = FALSE;

    IPortableDeviceKeyCollection* pKeys = NULL; // Output

    // CoCreate a key collection to store property keys.
    hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection, 
                                NULL, 
                                CLSCTX_INPROC_SERVER, 
                                IID_PPV_ARGS(&pKeys));

    if(SUCCEEDED(hr))
    {
        hr = pSensor->GetSupportedDataFields(&pKeys);
    }

    if(SUCCEEDED(hr))
    {
        hr = pKeys->GetCount(&cKeys);
    }

    if(SUCCEEDED(hr))
    {
        PROPERTYKEY pk;
        BOOL bHour, bMinute, bSecond = FALSE;

        for (DWORD i = 0; i < cKeys; i++)
        {
            hr = pKeys->GetAt(i, &pk);

            if(SUCCEEDED(hr))
            {
                // Test for the data fields.
                if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_HOUR))
                {
                    bHour = TRUE;
                }
                else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_MINUTE))
                {
                    bMinute = TRUE;
                }
                else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_SECOND))
                {
                    bSecond = TRUE;
                }
            }
        }

        // Compute the return value.
        // If all three properties were found,
        // bRet will resolve to TRUE.
        bRet = bHour && bMinute && bSecond;
    }

    SafeRelease(&pKeys);

    return bRet;
}

ISensorDataReport