Anfordern von Benutzerberechtigungen
In diesem Thema wird beschrieben, wie Sie vom Benutzer Berechtigungen 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 Szenarios, in denen Sie Benutzerberechtigungen anfordern können.
Im folgenden Beispielcode werden mithilfe eines asynchronen Methodenaufrufs einfach Berechtigungen für alle Vom Sensor-Manager abgerufenen Sensoren nach Typ angefordert. Die Plattform öffnet ein Dialogfeld, in dem der Benutzer aufgefordert wird, nur Sensoren zu aktivieren, die noch nicht aktiviert sind. Um zu bestimmen, ob der Benutzer in diesem Fall Sensoren aktiviert hat, müssen Sie das ISensorEvents::OnStateChanged-Ereignis 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 dieses Verfahren 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 beim Versuch, einen Datenbericht von einem bestimmten Sensor abzurufen, ein Fehler auftritt.
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");
}
}
}