ユーザーアクセス許可の要求

このトピックでは、センサーを使用するようにユーザーにアクセス許可を要求する方法について説明します。 Sensor API のアクセス許可の背景情報については、「 ユーザーのアクセス許可の管理」を参照してください。

次の例は、ユーザーのアクセス許可を要求することを選択できる一般的なシナリオの一部を示しています。

次のコード例では、非同期メソッド呼び出しを使用して、センサー マネージャーから取得したすべてのセンサーのアクセス許可を種類別に要求するだけです。 プラットフォームでは、まだ有効になっていないセンサーのみを有効にするようにユーザーに求めるダイアログ ボックスが開きます。 この場合、ユーザーがセンサーを有効にしたかどうかを確認するには、 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);
}

データの取得を試みる前に、センサーの状態を同期的にテストすることを選択できます。 次のコード例は、この手法を示しています。

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

次のコード例では、特定のセンサーからデータ レポートを取得しようとして失敗した場合に、センサーのアクセス許可をユーザーに求めます。

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

ユーザーのアクセス許可の管理