Windows 10 不断提示是不是允许使用精确位置

Posted

技术标签:

【中文标题】Windows 10 不断提示是不是允许使用精确位置【英文标题】:Windows 10 constantly prompts for permission to use precise locationWindows 10 不断提示是否允许使用精确位置 【发布时间】:2017-12-12 08:18:53 【问题描述】:

我有一个非常简单的应用程序,它使用实时位置数据来获取相关信息,用 C# 作为 UWP 10.0 应用程序开发。

我与geolocation API的交互非常简单:我只在“Capabilities”下的“Package Manifest”中检查了Location,并且只使用了以下API调用:

var locator = new Windows.Devices.Geolocation.Geolocator();
var location = await locator.GetGeopositionAsync();

首次调用时,Windows 10 会弹出“允许此应用程序使用您的精确位置 [yes | no]”对话框。选择“是”似乎可以将该选择“保存”大约 5 分钟左右;在接下来的五分钟内获取用户位置的后续尝试通过(我相信他们返回缓存的值,因为它似乎永远不会改变),但超过 5 分钟后,权限对话框总是再次显示(即使用户已经授权)。

通过阅读 MSDN 上的地理定位 API 文档,我找不到任何表明这是预期行为的信息。在 Metro 控制面板的隐私设置下,此应用程序位于允许使用精确位置的应用程序列表下。更重要的是,该列表中启用了精确位置的其他应用从未提示我允许他们在第一次之后访问精确位置。

我在这里做错了什么,如何防止此对话框不断弹出?

编辑

使用await Geolocator.RequestAccessAsync(),只要不修改/重新编译exe,权限就会被缓存。

【问题讨论】:

【参考方案1】:

我能够复制您的问题。但是根据official documentation,它明确提到,您需要在任何呼叫之前致电RequestAccessAsync()

因此,当我将您的代码行更改为以下代码时,权限请求窗口仅显示一次,并且直接进行了后续调用。

GeolocationAccessStatus accessStatus = await Geolocator.RequestAccessAsync();
if (accessStatus == GeolocationAccessStatus.Allowed)

    Geolocator locator = new Geolocator();
    Geoposition location = await locator.GetGeopositionAsync();
    locText.Text = location.Coordinate.Point.Position.Latitude + Environment.NewLine + location.Coordinate.Point.Position.Longitude;

【讨论】:

我得到了非常随机的结果,尽管docs.microsoft.com/en-us/uwp/api/… 说这个方法只提示一次许可。它随机允许请求通过,并通过权限对话框阻止对RequestAccessAsync() 的其他调用。 我很确定 RequestAccessAsync() 被隐式调用;文档说如果不调用该方法,地理定位数据将被阻止,我没有这样的问题。 哦,我知道发生了什么:如果应用程序被修改,则会显示一个对话框。不过,这不是记录在案的行为。 @Mahmoud Al-Qudsi 修改应用是什么意思? 如果二进制文件发生了变化。

以上是关于Windows 10 不断提示是不是允许使用精确位置的主要内容,如果未能解决你的问题,请参考以下文章

64位win8.1系统无法安装更新 kbKB2919355,求解决

使用WinSXS进行系统盘瘦身Windows 7/2008/10/2012不断变大的C盘(Windows 更新清理)

精确到小数点后面六位与保留六位有效数字是不是相同

win7用“照片库查看器”(非windows照片查看器)看图,提示不是有效的32位应用程序

Citrix Receiver 4.11 Windows 10 64位重复下载提示

Windows 7命令提示符是不是有等效的stdbuf?