다음을 통해 공유


센서 검색

중요합니다

대신 UWP 센서 API 를 사용합니다.

COM 기반 센서 API는 더 이상 사용되지 않으며 새 애플리케이션에서 사용해서는 안 됩니다. 추가 기능 또는 향상된 기능은 계획되지 않으며 지원이 제한됩니다.

센서 개체를 검색하려면 ISensorManager 인터페이스를 사용합니다. 이 인터페이스는 센서 API의 루트 인터페이스라고 생각할 수 있습니다. ISensorManager사용하려면 먼저 COM CoCreateInstance 메서드를 호출해야 합니다.

다음 예제 코드는 센서 관리자의 인스턴스를 만듭니다.

// Create the sensor manager.
hr = CoCreateInstance(CLSID_SensorManager, 
                        NULL, CLSCTX_INPROC_SERVER,
                        IID_PPV_ARGS(&pSensorManager));

if(hr == HRESULT_FROM_WIN32(ERROR_ACCESS_DISABLED_BY_POLICY))
{
    // Unable to retrieve sensor manager due to 
    // group policy settings. Alert the user.
}

ISensorManager대한 포인터를 성공적으로 검색한 후에는 범주, 유형 또는 ID별로 센서를 검색할 수 있습니다. 형식 또는 범주별로 센서를 검색하는 경우 요청된 범주 또는 형식에 속하는 사용 가능한 모든 센서가 포함된 ISensorCollection 인터페이스에 대한 포인터를 받게 됩니다. 해당 ID로 센서를 검색하는 경우 요청한 고유 센서를 나타내는 ISensor 인터페이스에 대한 포인터를 받게 됩니다.

다음 예제 코드는 SAMPLE_SENSOR_CATEGORY_DATE_TIME 범주에 속하는 센서 컬렉션을 검색합니다. 그런 다음 코드는 컬렉션의 첫 번째 센서를 인덱스로 검색합니다.

// Get the sensor collection.
hr = pSensorManager->GetSensorsByCategory(SAMPLE_SENSOR_CATEGORY_DATE_TIME, &pSensorColl);
  
if(SUCCEEDED(hr))
{
    ULONG ulCount = 0;

    // Verify that the collection contains
    // at least one sensor.
    hr = pSensorColl->GetCount(&ulCount);

    if(SUCCEEDED(hr))
    {
        if(ulCount < 1)
        {
            wprintf_s(L"\nNo sensors of the requested category.\n");
            hr = E_UNEXPECTED;
        }
    }
}

if(SUCCEEDED(hr))
{
    // Get the first available sensor.
    hr = pSensorColl->GetAt(0, &pSensor);
}

SENSOR_CATEGORY_ALL 사용하여 사용 가능한 모든 센서를 검색할 수 있습니다.

비슷한 방식으로 특정 유형의 센서를 검색할 수 있습니다.

다음 예제 코드는 SAMPLE_SENSOR_TYPE_TIME 형식의 센서 컬렉션을 검색합니다. 그런 다음 코드는 컬렉션의 첫 번째 센서를 인덱스로 검색합니다.

// Get the sensor collection.
hr = pSensorManager->GetSensorsByType(SAMPLE_SENSOR_TYPE_TIME, &pSensorColl);
  
if(SUCCEEDED(hr))
{
    ULONG ulCount = 0;

    // Verify that the collection contains
    // at least one sensor.
    hr = pSensorColl->GetCount(&ulCount);

    if(SUCCEEDED(hr))
    {
        if(ulCount < 1)
        {
            wprintf_s(L"\nNo sensors of the requested type.\n");
            hr = E_UNEXPECTED;
        }
    }
}

if(SUCCEEDED(hr))
{
    // Get the first available sensor.
    hr = pSensorColl->GetAt(0, &pSensor);
}

해당 ID로 센서를 검색하려면 센서의 고유 ID를 알고 있어야 합니다. 센서는 일반적으로 동일한 메이크 및 모델의 여러 센서를 식별할 수 있도록 처음 연결되면 이 ID를 생성합니다. 즉, 센서 ID를 미리 알 수 없습니다. 그러나 이전에 검색한 특정 센서 ID의 복사본을 저장한 경우(예: ISensor::GetID호출하여) 동일한 센서를 다시 검색할 수 있습니다.

다음 예제 코드에서는 ID를 사용하여 센서를 검색하는 방법을 보여 줍니다.

ISensor* pSensor = NULL;

// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);

센서 관리자로부터 이벤트를 수신하여 센서를 이용 가능할 때 검색할 수도 있습니다. 자세한 내용은 ISensorManager::SetEventSink참조하세요.

ISensorManagerEvents::OnSensorEnter