Partager via


Demande d’autorisations utilisateur

Cette rubrique explique comment demander des autorisations à l’utilisateur pour utiliser des capteurs. Pour plus d’informations sur les autorisations dans l’API capteur, consultez Gestion des autorisations utilisateur.

Les exemples suivants illustrent certains des scénarios courants dans lesquels vous pouvez choisir de demander des autorisations utilisateur.

L’exemple de code suivant demande simplement des autorisations pour tous les capteurs récupérés à partir du gestionnaire de capteurs, par type, à l’aide d’un appel de méthode asynchrone. La plateforme ouvre une boîte de dialogue pour inviter l’utilisateur uniquement à activer les capteurs qui ne sont pas déjà activés. Pour déterminer si l’utilisateur a activé des capteurs dans ce cas, vous devez gérer l’événement 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);
}

Vous pouvez choisir de tester l’état du capteur de manière synchrone avant de tenter de récupérer des données. L’exemple de code suivant illustre cette technique.

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

L’exemple de code suivant invite l’utilisateur à entrer des autorisations de capteur si une tentative de récupération d’un rapport de données à partir d’un capteur particulier échoue.

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

Gestion des autorisations utilisateur