Compartilhar via


Solicitando permissões de usuário

Este tópico descreve como solicitar permissões do usuário para usar sensores. Para obter informações básicas sobre permissões na API do Sensor, consulte Gerenciamento de permissões de usuário.

Os exemplos a seguir ilustram alguns dos cenários comuns em que você pode optar por solicitar permissões de usuário.

O código de exemplo a seguir simplesmente solicita permissões para todos os sensores recuperados do gerenciador de sensores, por tipo, usando uma chamada de método assíncrono. A plataforma abrirá uma caixa de diálogo para solicitar ao usuário apenas que habilite os sensores que ainda não estão habilitados. Para determinar se o usuário habilitou algum sensor nesse caso, você deve manipular o evento 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);
}

Você pode optar por testar o estado do sensor de forma síncrona antes de tentar recuperar dados. O código de exemplo a seguir demonstra essa técnica.

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);
}

O código de exemplo a seguir solicita ao usuário permissões de sensor se uma tentativa de recuperar um relatório de dados de um sensor específico falhar.

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");
       }
    }
}

ISensorManager

Gerenciando permissões de usuário