Condividi tramite


Richiesta di autorizzazioni utente

In questo argomento viene descritto come richiedere autorizzazioni all'utente per l'uso dei sensori. Per informazioni di base sulle autorizzazioni nell'API del sensore, vedere Gestione delle autorizzazioni utente.

Gli esempi seguenti illustrano alcuni degli scenari comuni in cui è possibile scegliere di richiedere le autorizzazioni utente.

Il codice di esempio seguente richiede semplicemente le autorizzazioni per tutti i sensori recuperati dal gestore di sensori, per tipo, usando una chiamata asincrona al metodo. La piattaforma aprirà una finestra di dialogo per richiedere all'utente di abilitare solo i sensori non già abilitati. Per determinare se l'utente ha abilitato i sensori in questo caso, è necessario gestire l'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);
}

È possibile scegliere di testare lo stato del sensore in modo sincrono prima di tentare di recuperare i dati. Il codice di esempio seguente illustra questa tecnica.

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

Il codice di esempio seguente richiede all'utente le autorizzazioni del sensore se un tentativo di recuperare un report di dati da un particolare sensore non riesce.

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

Gestione delle autorizzazioni utente