Bagikan melalui


Meminta Izin Pengguna

Topik ini menjelaskan cara meminta izin dari pengguna untuk menggunakan sensor. Untuk informasi latar belakang tentang izin di API Sensor, lihat Mengelola Izin Pengguna.

Contoh berikut mengilustrasikan beberapa skenario umum di mana Anda dapat memilih untuk meminta izin pengguna.

Contoh kode berikut hanya meminta izin untuk semua sensor yang diperoleh dari pengelola sensor, sesuai dengan jenisnya, menggunakan panggilan metode asinkron. Platform akan membuka kotak dialog untuk meminta pengguna hanya mengaktifkan sensor yang belum diaktifkan. Untuk menentukan apakah pengguna mengaktifkan sensor apa pun dalam hal ini, Anda harus menangani peristiwa 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);
}

Anda dapat memilih untuk menguji status sensor secara sinkron sebelum mencoba mengambil data. Contoh kode berikut menunjukkan teknik ini.

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

Contoh kode berikut meminta pengguna untuk izin sensor jika upaya untuk mengambil laporan data dari sensor tertentu gagal.

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

Mengelola Izin Pengguna