Запрос разрешений пользователя
В этом разделе описывается, как запрашивать разрешения от пользователя на использование датчиков. Дополнительные сведения о разрешениях в API датчиков см. в разделе "Управление разрешениями пользователей".
В следующих примерах показаны некоторые распространенные сценарии, в которых можно запросить разрешения пользователей.
В следующем примере кода просто запрашиваются разрешения для всех датчиков, полученных из диспетчера датчиков, по типу с помощью вызова асинхронного метода. Платформа откроет диалоговое окно для запроса пользователя только включить датчики, которые еще не включены. Чтобы определить, включил ли пользователь датчики в этом случае, необходимо обработать событие 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);
}
Вы можете проверить состояние датчика синхронно, прежде чем пытаться получить данные. В следующем примере кода демонстрируется этот метод.
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);
}
В следующем примере кода пользователь запрашивает разрешения датчика, если попытка получить отчет о данных из определенного датчика завершается ошибкой.
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");
}
}
}
См. также