我们正在构建一个多平台(桌面和平板电脑)应用程序,针对Windows 8.1和10。由于我们处理空间数据,因此我们提供了使用设备GPS接收器的当前位置的可能性。为了允许轻松适应(硬件)环境,我们将GPS逻辑(包括API调用)放置在外部程序集中,根据配置进行加载。
最近我们发现了一些问题,使用Geolocator从Windows.Devices.Geolocation-API的gps模块在Windows 10下(但以前在Windows 8.1上运行良好),未提供任何位置信息。进一步调查和RTFM显示,在Windows 10下,我们必须在调用位置之前调用RequestAccessAsync。
由于RequestAcessAsync方法在Windows 8.1中不可用,我们决定创建一个新的程序集,针对Windows 10(然后通过我们的配置轻松绑定/使用),这很有效。
这就是我们目前卡住的地方:
最近我们发现了一些问题,使用Geolocator从Windows.Devices.Geolocation-API的gps模块在Windows 10下(但以前在Windows 8.1上运行良好),未提供任何位置信息。进一步调查和RTFM显示,在Windows 10下,我们必须在调用位置之前调用RequestAccessAsync。
由于RequestAcessAsync方法在Windows 8.1中不可用,我们决定创建一个新的程序集,针对Windows 10(然后通过我们的配置轻松绑定/使用),这很有效。
public Win10GpsProvider()
{
RequestAccessAsync();
}
public async void RequestAccessAsnyc()
{
//next line causes exception:
var request = await Geolocator.RequestAccessAsync();
switch (request)
{
// we don't even get here... :(
}
}
只有当在UI线程调用RequestAccessAsync方法时遇到抛出的异常,指出必须在应用程序容器的上下文中进行调用。
此操作仅在应用程序容器的上下文中有效。(HRESULT异常:0x8007109A)
这个异常在桌面和平板电脑上都会发生(通过远程调试验证)。
进一步搜索,将“location”添加为package.appxmanifest所需的功能可能会有所帮助:
<Capabilities>
<Capability Name="location"/>
</Capabilities>
这就是我们目前卡住的地方:
- 我们没有UWP应用程序(实际上不想/不能改变,因为我们同时针对Win 8.1并有一个定义的部署工作流包括设置)
- 由于没有UWP应用程序/上下文,我们无法使程序集正常运行而不出现异常