Windows 10 移动应用程序扩展执行不断被拒绝

Posted

技术标签:

【中文标题】Windows 10 移动应用程序扩展执行不断被拒绝【英文标题】:Windows 10 Mobile App Extended Execution keeps getting denied 【发布时间】:2017-11-09 07:34:14 【问题描述】:

我正在尝试在我的 Windows 10 UWP 应用上使用扩展执行来进行位置跟踪。网上有很多这样的例子。我基本上是在使用这个通用的代码块。

using (var session = new ExtendedExecutionSession())

    session.Reason = ExtendedExecutionReason.LocationTracking;
    session.Description = "Tracking your location";
    session.Revoked += NewSession_Revoked;
    var result = await session.RequestExtensionAsync();

    switch (result)
    
        case ExtendedExecutionResult.Allowed:
            await StartLocationTrackingAsync();
            break;
        default:
            case ExtendedExecutionResult.Denied:
            //Notify user or log this.
            break;
    

此代码块在我的应用的 Suspending 事件处理程序中执行,如下所示:

public Scenario1()

    this.InitializeComponent();
    Application.Current.Suspending += Current_Suspending;


private async void Current_Suspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)

    //Do my extended execution request here.

我遇到的第一个问题是我什至无法触发该事件,但我在 SO 上读到 VS 在调试时不会暂停您的应用程序。因此,我使用 VS 中的生命周期事件下拉菜单强制它暂停。现在,我每次都会触发 Suspending 事件,这很好。

但是,当我请求扩展执行会话时,每次都被拒绝。我在模拟器和我的物理 W10 移动设备上尝试过多次,每次都被拒绝。

这是为什么?我怎样才能让它被允许?

谢谢!

【问题讨论】:

【参考方案1】:

假设您已经在应用清单中声明了 Location,您将必须在前台运行代码,这意味着它将在您的 MainPage_Loaded 回调中工作但处于暂停状态。

位置跟踪扩展执行会话可以运行只要 需要。但是,每个会话只能运行一个这样的会话 设备。位置跟踪扩展执行会话只能是 在前台请求,并且应用程序必须处于运行状态。 这可确保用户知道应用程序已启动 扩展位置跟踪会话。

要在后台运行它,请参见 -

仍然可以使用 GeoLocator,而应用程序在后台使用背景 任务或应用服务,无需请求位置跟踪 扩展执行会话。

当你使用 LocationTracking 扩展执行时 -

创建时指定 ExtendedExecutionReason.LocationTracking ExtendedExecutionSession 如果您的应用需要定期记录 来自 GeoLocator 的位置。健身追踪和导航应用 需要定期监控用户位置并应使用此 原因。

这是full article。

【讨论】:

感谢您的回复。我已经阅读了您提供链接的文章,但是我阅读的所有其他内容并没有解释您所做的事情,即从哪里请求扩展会话。我按照你的建议移动了它,它工作了!现在是允许的。但是,新问题是允许的,因此调用了我的 StartLocationTrackingAsync 方法,并且在前台运行时一切正常。但是,当我暂停应用程序时,一切都停止工作。我停止从 GeoLocator 获取 OnPositionChanged 事件。当我恢复时,它又开始工作了。我错过了设置的另一个步骤吗? 扩展执行位置跟踪不是为在后台运行而设计的,而是在前台定期与地理定位器交互。如果要执行 bg,则需要使用 bg 任务或应用服务。 好的,明白了。但是你能再回答一个问题吗?我的 GeoLocation Position Changed 事件处理程序不是在时间间隔上引发,而是在距离上引发,它设置为 100 米。我需要这个事件经常提出这个问题,因为我正在使用地理围栏。我以为我读到后台任务只会触发 x 分钟,这对我来说太长了。真的吗?理想情况下,我有一个事件处理程序,它会像在前台那样引发。有了 bg,我知道我将不得不轮询该位置。我可以用其中一种方法在几秒钟内完成吗? 我刚读到后台任务每 15 分钟运行一次,所以这不好。 地理围栏是基于位置的,而不是基于时间的。当位置没有改变时,你不想做太多事情。您能否就此提出一个新问题?

以上是关于Windows 10 移动应用程序扩展执行不断被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

ORA-123456:TNS:权限被拒 ,安装oracle出现这个错误,怎么解决啊,在线等。。。。。

华为审核被拒:检查HMS Core更新失败

用于重命名和移动文件的 Python、bat 文件和任务计划程序 - 在 Windows 10 中无法正常工作

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

不断更新应用扩展

求助appStore审核被拒的原因