Udostępnij przez


Żądanie uprawnień użytkownika

Ważne

Zamiast tego użyj API czujników UWP.

Interfejs API czujnika oparty na modelu COM jest przestarzały i nie powinien być używany w nowych aplikacjach. Nie są planowane żadne dodatkowe funkcje ani ulepszenia, a pomoc techniczna będzie ograniczona.

W tym temacie opisano sposób żądania uprawnień od użytkownika w celu używania czujników. Aby uzyskać podstawowe informacje o uprawnieniach w interfejsie API czujnika, zobacz Zarządzanie uprawnieniami użytkowników.

W poniższych przykładach przedstawiono niektóre typowe scenariusze, w których można zażądać uprawnień użytkownika.

Poniższy przykładowy kod po prostu żąda uprawnień do wszystkich czujników pobranych z menedżera czujników według typu przy użyciu wywołania metody asynchronicznej. Platforma otworzy okno dialogowe, aby monitować użytkownika tylko o włączenie czujników, które nie zostały jeszcze włączone. Aby określić, czy użytkownik włączył jakiekolwiek czujniki w tym przypadku, należy obsługiwać zdarzenie 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);
}

Przed próbą pobrania danych można przetestować stan czujnika synchronicznie. Poniższy przykładowy kod demonstruje tę technikę.

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

Poniższy przykładowy kod monituje użytkownika o uprawnienia czujnika, jeśli próba pobrania raportu danych z określonego czujnika zakończy się niepowodzeniem.

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

zarządzanie uprawnieniami użytkowników