Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Zamiast tego użyj API czujników UWP.
Interfejs API czujnika oparty na modelu COM jest przestarzały i nie powinien być używany w nowych aplikacjach. Nie są planowane żadne dodatkowe funkcje ani ulepszenia, a pomoc techniczna będzie ograniczona.
W tym temacie opisano sposób żądania uprawnień od użytkownika w celu używania czujników. Aby uzyskać podstawowe informacje o uprawnieniach w interfejsie API czujnika, zobacz Zarządzanie uprawnieniami użytkowników.
W poniższych przykładach przedstawiono niektóre typowe scenariusze, w których można zażądać uprawnień użytkownika.
Poniższy przykładowy kod po prostu żąda uprawnień do wszystkich czujników pobranych z menedżera czujników według typu przy użyciu wywołania metody asynchronicznej. Platforma otworzy okno dialogowe, aby monitować użytkownika tylko o włączenie czujników, które nie zostały jeszcze włączone. Aby określić, czy użytkownik włączył jakiekolwiek czujniki w tym przypadku, należy obsługiwać zdarzenie ISensorEvents::OnStateChanged.
// Get the sensor collection.
hr = pSensorManager->GetSensorsByType(SAMPLE_SENSOR_TYPE_TIME, &pSensorColl);
if(SUCCEEDED(hr))
{
// Request permissions for all sensors
// in the collection.
hr = pSensorManager->RequestPermissions(0, pSensorColl, FALSE);
}
Przed próbą pobrania danych można przetestować stan czujnika synchronicznie. Poniższy przykładowy kod demonstruje tę technikę.
if(SUCCEEDED(hr))
{
// Check the current sensor state.
SensorState state = SENSOR_STATE_NOT_AVAILABLE;
hr = pSensor->GetState(&state);
if(SUCCEEDED(hr))
{
if(state == SENSOR_STATE_ACCESS_DENIED)
{
wprintf_s(L"\nSensor not enabled, requesting permissions...\n");
hr = pSensorManager->RequestPermissions(0, pSensorColl, TRUE);
if(hr == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) ||
hr == HRESULT_FROM_WIN32(ERROR_CANCELLED))
{
wprintf_s(L"\nYou have previously denied access to this sensor.\n");
wprintf_s(L"Please use the Location and Other Sensors control panel\n");
wprintf_s(L"to enable the WDK Time Sensor and run this program again.\n");
}
}
}
}
if(SUCCEEDED(hr))
{
// Get the data report.
hr = pSensor->GetData(&pReport);
}
Poniższy przykładowy kod monituje użytkownika o uprawnienia czujnika, jeśli próba pobrania raportu danych z określonego czujnika zakończy się niepowodzeniem.
if(SUCCEEDED(hr))
{
// Get the data report.
hr = pSensor->GetData(&pReport);
if(E_ACCESSDENIED == hr)
{
wprintf_s(L"\nSensor not enabled, requesting permissions...\n");
hr = pSensorManager->RequestPermissions(0, pSensorColl, TRUE);
if(hr == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) ||
hr == HRESULT_FROM_WIN32(ERROR_CANCELLED))
{
wprintf_s(L"\nYou have previously denied access to this sensor.\n");
wprintf_s(L"Please use the Location and Other Sensors control panel\n");
wprintf_s(L"to enable the WDK Time Sensor and run this program again.\n");
}
}
}