Поделиться через


Метод ILocation::RequestPermissions (locationapi.h)

[API расположения Win32 доступен для использования в операционных системах, указанных в разделе Требования. В последующих версиях он может быть изменен или недоступен. Вместо этого используйте API Windows.Devices.Geolocation . ]

Открывает системное диалоговое окно для запроса разрешения пользователя на включение устройств определения местоположения.

Синтаксис

HRESULT RequestPermissions(
  [in] HWND  hParent,
  [in] IID   *pReportTypes,
  [in] ULONG count,
       BOOL  fModal
);

Параметры

[in] hParent

HWND для родительского окна. Этот параметр является необязательным. В Windows 8 диалог всегда является модальным, если предоставлен параметр hParent , и не модальным, если параметр hParent имеет значение NULL.

[in] pReportTypes

Указатель на массив IID . Этот массив должен содержать идентификаторы интерфейсов для всех типов отчетов, для которых запрашивается разрешение. Идентификаторами интерфейсов допустимых типов отчетов являются IID_ILatLongReport и IID_ICivicAddressReport. Количество идентификаторов должно соответствовать значению, указанному в параметре count .

[in] count

Количество идентификаторов интерфейсов, содержащихся в pReportTypes.

fModal

Этот параметр не используется.

Возвращаемое значение

Этот метод может возвращать одно из этих значений.

В следующей таблице описаны коды возврата при синхронном вызове.

Код возврата Описание
S_OK
Службы определения местоположения, включенные пользователем. Метод выполнен успешно.
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)
Платформа расположения отключена. Администратор выключил платформу расположения.
HRESULT_FROM_WIN32(ERROR_CANCELLED)
Пользователь не включил доступ к службам определения местоположения или отменил диалоговое окно.
 

В следующей таблице описаны коды возврата, если вызов является асинхронным.

Код возврата Описание
S_OK
Пользователь включил доступ к службам определения местоположения. Метод выполнен успешно.
E_INVALIDARG
Аргумент является недопустимым.
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)
Платформа расположения отключена. Администратор выключил платформу расположения. Диалоговое окно не отображается.

Комментарии

Если пользователь решит не включать службы определения местоположения, Windows больше не будет отображать диалоговое окно разрешений.

Примечание Повторяющиеся асинхронные вызовы RequestPermissions отображают несколько экземпляров диалогового окна Включение служб определения местоположения и могут привести к переполнению экрана диалоговых окон, что приведет к ухудшению взаимодействия с пользователем. Если вы считаете, что другие датчики расположения могут быть установлены после первого вызова RequestPermissions, требующего другого вызова RequestPermissions, следует либо вызвать RequestPermissions синхронно, либо дождаться установки всех датчиков расположения для выполнения асинхронного вызова.
 
Примечание Выполнение синхронного вызова из потока пользовательского интерфейса приложения Windows может заблокировать поток пользовательского интерфейса и сделать приложение менее быстрым. Чтобы избежать этого, не выполняйте синхронный вызов RequestPermissions из потока пользовательского интерфейса.
 
Примечание Если приложение, работающее в защищенном режиме, например вспомогательный объект браузера (BHO) для интернет-Обозреватель, вызывает RequestPermissions, и пользователь решает не включать расположение с помощью диалогового окна, поставщик расположения не будет включен, но Windows снова отобразит диалоговое окно, если метод RequestPermissions снова вызывается тем же пользователем.
 

Примеры

В следующем примере показано, как вызвать RequestPermissions , чтобы запросить разрешение для отчетов о широте и долготе.

             // Array of report types of interest. Other ones include IID_ICivicAddressReport
            IID REPORT_TYPES[] = { IID_ILatLongReport };

            // Request permissions for this user account to receive location data for all the
            // types defined in REPORT_TYPES (which is currently just one report type)
            // The last parameter is not used.
            if (FAILED(spLocation->RequestPermissions(
                  NULL, 
                  REPORT_TYPES, 
                  ARRAYSIZE(REPORT_TYPES), 
                  TRUE))) 
            {
                wprintf(L"Warning: Unable to request permissions.\n");
            }


Требования

   
Минимальная версия клиента Windows 7 [только классические приложения],Windows 7
Минимальная версия сервера Ни одна версия не поддерживается
Целевая платформа Windows
Header locationapi.h
DLL LocationAPI.dll