ILocation::RequestPermissions 方法 (locationapi.h)

[Win32 位置 API 可用于“要求”部分中指定的操作系统。 它可能在后续版本中变更或不可用。 请改用 Windows.Devices.Geolocation API。 ]

打开系统对话框,请求用户启用位置设备的权限。

语法

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

parameters

[in] hParent

父窗口的 HWND。 此参数是可选的。 在 Windows 8 中,如果提供了 hParent ,则对话框始终为模式;如果 hParent 为 NULL,则对话框始终为模式。

[in] pReportTypes

指向 IID 数组的指针。 此数组必须包含要为其请求权限的所有报表类型的接口 ID。 IID_ILatLongReport和IID_ICivicAddressReport有效报表类型的接口 ID。 ID 计数必须与通过 count 参数指定的值匹配。

[in] count

pReportTypes 中包含的接口 ID 计数。

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 应用程序的用户界面 (UI) 线程进行同步调用可能会阻止 UI 线程并降低应用程序的响应能力。 为防止出现这种情况,请不要从 UI 线程对 RequestPermissions 进行同步调用。
 
注意 如果在保护模式下运行的应用程序(例如浏览器帮助程序对象 (适用于 Internet Explorer 的 BHO) )调用 RequestPermissions,并且用户选择不使用对话框启用位置,则不会启用位置提供程序,但如果同一用户再次调用 RequestPermissions ,Windows 将再次显示该对话框。
 

示例

以下示例演示如何调用 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
标头 locationapi.h
DLL LocationAPI.dll