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
未使用此参数。
返回值
此方法可以返回其中一个值。
下表描述了同步调用时的返回代码。
返回代码 | 说明 |
---|---|
|
用户已启用定位服务。 方法成功。 |
|
位置平台已禁用。 管理员关闭了位置平台。 |
|
用户未启用对定位服务的访问权限或取消了对话框。 |
下表描述了调用为异步时的返回代码。
返回代码 | 说明 |
---|---|
|
用户启用了对定位服务的访问权限。 方法成功。 |
|
自变量无效。 |
|
位置平台已禁用。 管理员关闭了位置平台。 未显示对话框。 |
注解
如果用户选择不启用定位服务,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 |