我有一个非常简单的应用程序,它使用实时位置数据来获取相关信息,在C#中作为UWP 10.0应用程序开发。
我与地理位置API的互动非常简单:我只检查了"包装清单中的Location
"在"能力"我只使用以下API调用:
var locator = new Windows.Devices.Geolocation.Geolocator();
var location = await locator.GetGeopositionAsync();
首次进行此调用时,Windows 10会抛出一个"允许此应用程序使用您的精确位置[是|没有]"对话。选择"是"似乎"保存"这个选择大约5分钟左右;随后尝试在接下来的五分钟内获得用户的位置(我相信它们会返回缓存的值,因为它似乎永远不会改变),但超过5分钟后,权限对话框将再次显示(即使用户已经授权)。
从我阅读MSDN上的地理位置API文档,我发现没有任何迹象表明这是预期的行为。在地铁控制面板的隐私设置下,此应用程序位于允许使用精确位置的应用列表下。此外,该列表中启用了精确位置的其他应用程序从未促使我允许他们在第一次访问精确位置。
我在这里做错了什么,如何防止此对话框不断弹出?
修改
使用await Geolocator.RequestAccessAsync()
,只要不修改/重新编译exe,就会缓存权限。
答案 0 :(得分:2)
我能够复制你的问题。但根据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;
}