Compartir a través de


Método ILocation::RequestPermissions (locationapi.h)

[La API de ubicación de Win32 está disponible para su uso en los sistemas operativos especificados en la sección Requisitos. En versiones posteriores podría modificarse o no estar disponible. En su lugar, use la API Windows.Devices.Geolocation . ]

Abre un cuadro de diálogo del sistema para solicitar permiso de usuario para habilitar los dispositivos de ubicación.

Sintaxis

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

Parámetros

[in] hParent

HWND para la ventana primaria. Este parámetro es opcional. En Windows 8, el cuadro de diálogo siempre es modal si se proporciona hParent y no modal si hParent es NULL.

[in] pReportTypes

Puntero a una matriz IID . Esta matriz debe contener identificadores de interfaz para todos los tipos de informe para los que solicita permiso. Los identificadores de interfaz de los tipos de informe válidos son IID_ILatLongReport y IID_ICivicAddressReport. El recuento de identificadores debe coincidir con el valor especificado a través del parámetro count .

[in] count

Recuento de identificadores de interfaz contenidos en pReportTypes.

fModal

Este parámetro no se utiliza.

Valor devuelto

Este método puede devolver uno de estos valores.

En la tabla siguiente se describen los códigos de retorno cuando la llamada es sincrónica.

Código devuelto Descripción
S_OK
Los servicios de ubicación habilitados para el usuario. El método se ha llevado a cabo de forma correcta.
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)
La plataforma de ubicación está deshabilitada. Un administrador ha desactivado la plataforma de ubicación.
HRESULT_FROM_WIN32(ERROR_CANCELLED)
El usuario no habilitó el acceso a los servicios de ubicación ni canceló el cuadro de diálogo.
 

En la tabla siguiente se describen los códigos de retorno cuando la llamada es asincrónica.

Código devuelto Descripción
S_OK
El usuario ha habilitado el acceso a los servicios de ubicación. El método se ha llevado a cabo de forma correcta.
E_INVALIDARG
Un argumento no es válido.
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)
La plataforma de ubicación está deshabilitada. Un administrador ha desactivado la plataforma de ubicación. No se mostró el cuadro de diálogo.

Comentarios

Si el usuario decide no habilitar los servicios de ubicación, Windows no volverá a mostrar el cuadro de diálogo permisos.

Nota Las llamadas asincrónicas repetidas a RequestPermissions mostrarán varias instancias del cuadro de diálogo Habilitar servicios de ubicación y pueden inundar la pantalla con cuadros de diálogo, lo que da lugar a una experiencia de usuario deficiente. Si cree que otros sensores de ubicación se pueden instalar después de la primera llamada a RequestPermissions, que requieren otra llamada a RequestPermissions, debe llamar a RequestPermissions de forma sincrónica o esperar hasta que se instalen todos los sensores de ubicación para realizar una llamada asincrónica.
 
Nota Realizar una llamada sincrónica desde el subproceso de la interfaz de usuario (UI) de una aplicación Windows puede bloquear el subproceso de interfaz de usuario y hacer que la aplicación tenga menos capacidad de respuesta. Para evitar esto, no realice una llamada sincrónica a RequestPermissions desde el subproceso de la interfaz de usuario.
 
Nota Si una aplicación que se ejecuta en modo protegido, como un objeto auxiliar del explorador (BHO) para Internet Explorer, llama a RequestPermissions y el usuario decide no habilitar la ubicación mediante el cuadro de diálogo, el proveedor de ubicación no se habilitará, pero Windows mostrará de nuevo el cuadro de diálogo si RequestPermissions lo llama de nuevo el mismo usuario.
 

Ejemplos

En el ejemplo siguiente se muestra cómo llamar a RequestPermissions para solicitar permiso para los informes de latitud y longitud.

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


Requisitos

   
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio],Windows 7
Servidor mínimo compatible No se admite ninguno
Plataforma de destino Windows
Encabezado locationapi.h
Archivo DLL LocationAPI.dll