UWP/C# 设置地理围栏时出现“拒绝访问”异常

问题描述

我有一个 .NET 5 控制台应用程序,我按照 documentation '.NET 5:使用目标框架名字对象选项'。这意味着我的项目文件目前看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows10.0.18362</TargetFramework>
  </PropertyGroup>

</Project>

然后我尝试使用 new Geolocator().GetGeopositionAsync() 访问 Location Api,它按预期工作。 据我了解,某些 UWP API 仅在我的应用程序具有包标识时才能使用。因此,我创建了一个应用程序打包项目,该项目将我的控制台应用程序引用为应用程序。我按照 documentation 将整个项目打包为 msix 包。现在效果很好,我仍然可以按预期访问当前的地理位置。

但是,我按照 documentation 在 UWP 中设置地理围栏,一旦我尝试注册地理围栏甚至为触发的地理围栏注册事件处理程序,我就会得到一个

One or more errors occurred. (Access is denied. (0x80070005 (E_ACCESSDENIED)))

例外。我在清单文件中的功能定义如下:

  <Capabilities>
    <Capability Name="internetClient" />
    <rescap:Capability Name="runFullTrust" />
    <DeviceCapability Name="location"/>
  </Capabilities>

在我尝试设置地理围栏或注册事件处理程序之前,我总是调用 await Geolocator.RequestAccessAsync() 并且只有在此方法每次都返回 Allowed 时才继续执行操作。这意味着这个 question 的答案对我没有帮助。

是否有可能确保我定义能力的方式没有任何问题?例如,有没有办法在运行时检查我的能力?到目前为止,我没有找到有关该主题的任何内容。 或者我的主要假设是否存在问题,即只要我的控制台应用程序有一个包 ID,因为它被打包为 msix,我就可以访问像地理围栏这样的功能,否则我将无法访问这些功能

在检查我可以通过调用 await Geolocator.RequestAccessAsync() 访问该位置后,例如,我尝试执行以下代码

GeofenceMonitor.Current.GeofenceStateChanged += this.OnGeofenceStateChanged;

并立即收到异常。

编辑:我现在也尝试在 UWP 应用中使用相同的代码。在那里,它就像一个魅力,我注意到当执行 RequestLocation 时我收到一个弹出窗口,要求我授予应用程序访问该位置的权限。我的控制台应用程序中从未收到过类似的弹出窗口。我认为这可能是因为缺少 UI 线程。

我现在还尝试使用 WPF 应用程序而不是控制台应用程序来测试是否缺少 UI 线程可能是问题所在。但是,我在 WPF 应用程序(当然也打包为 .msix)中遇到了与控制台应用程序中相同的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...