Anfordern von Benutzerberechtigungen
In diesem Thema wird beschrieben, wie Sie Berechtigungen des Benutzers für die Verwendung von Sensoren anfordern. Hintergrundinformationen zu Berechtigungen in der Sensor-API finden Sie unter Verwalten von Benutzerberechtigungen.
Die folgenden Beispiele veranschaulichen einige der gängigen Szenarien, in denen Sie benutzerberechtigungen anfordern können.
Der folgende Beispielcode fordert einfach Berechtigungen für alle Sensoren an, die vom Sensor-Manager mithilfe eines asynchronen Methodenaufrufs abgerufen werden. Die Plattform öffnet ein Dialogfeld, um den Benutzer nur aufzufordern, Sensoren zu aktivieren, die noch nicht aktiviert sind. Um festzustellen, ob der Benutzer in diesem Fall Sensoren aktiviert hat, müssen Sie das Ereignis "ISensorEvents::OnStateChanged " behandeln.
// 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);
}
Sie können den Sensorzustand synchron testen, bevor Sie versuchen, Daten abzurufen. Im folgenden Beispielcode wird diese Technik veranschaulicht.
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);
}
Der folgende Beispielcode fordert den Benutzer zur Eingabe von Sensorberechtigungen auf, wenn ein Versuch, einen Datenbericht von einem bestimmten Sensor abzurufen, fehlschlägt.
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");
}
}
}
Zugehörige Themen