Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让我的应用程序在因屏幕锁定而暂停时仍能运行,然后唤醒设备_C#_Geolocation_Signalr_Windows 10 Universal_Windows 10 Mobile - Fatal编程技术网

C# 如何让我的应用程序在因屏幕锁定而暂停时仍能运行,然后唤醒设备

C# 如何让我的应用程序在因屏幕锁定而暂停时仍能运行,然后唤醒设备,c#,geolocation,signalr,windows-10-universal,windows-10-mobile,C#,Geolocation,Signalr,Windows 10 Universal,Windows 10 Mobile,我有一个Windows UWP应用程序,主要针对Windows 10 Mobile。此应用程序监视用户的脚流量以及他们何时进入或离开定义的地理围栏。然后,我有一个web后端,它使用信号器向设备发送位置数据,或从设备发送位置数据 问题在于锁屏。假设应用程序已启动并正在运行,但用户锁定设备或设置超时以锁定屏幕的选项过期,设备锁定。您可以点击电源,滑动解锁,然后看到应用程序仍在运行。但是,在锁定期间,我假设应用程序已暂停 所以,我想知道,首先,我的位置更新在挂起时会发生什么?我使用它们通过信号器将位置

我有一个Windows UWP应用程序,主要针对Windows 10 Mobile。此应用程序监视用户的脚流量以及他们何时进入或离开定义的地理围栏。然后,我有一个web后端,它使用信号器向设备发送位置数据,或从设备发送位置数据

问题在于锁屏。假设应用程序已启动并正在运行,但用户锁定设备或设置超时以锁定屏幕的选项过期,设备锁定。您可以点击电源,滑动解锁,然后看到应用程序仍在运行。但是,在锁定期间,我假设应用程序已暂停

所以,我想知道,首先,我的位置更新在挂起时会发生什么?我使用它们通过信号器将位置更新发送到我的中心,同时检查它们是否在地理围栏内/外。我正在做这样的事情:

_geolocator = new Geolocator { ReportInterval = 0, DesiredAccuracyInMeters = 10, MovementThreshold = 4};

// Subscribe to PositionChanged event to get updated tracking positions
_geolocator.PositionChanged += OnPositionChanged;

// Subscribe to StatusChanged event to get updates of location status changes
_geolocator.StatusChanged += OnStatusChanged;
我假设当锁屏接管并且我的应用程序被挂起时,我将不再获得我的OnPositionChanged事件?这是如何处理的其他事情,如轮流导航,它仍然会跟踪你的位置,即使应用程序暂停或锁定屏幕打开

另外,第二个问题是如何处理信号机连接?我希望在OnPositionChanged事件触发时仍能推出我的位置更新,就像我在应用程序未挂起时所做的那样。我也可以这样做吗

我读过关于后台任务的文章,但似乎这些任务只每隔15分钟运行一次(除非我误解了这是可配置的)。对于我的申请来说,15分钟太长了。我最想要的是30秒或1分钟

顺便说一句,是的,我知道所有这些都会严重影响电池寿命。让我们假设我不担心电池寿命

谢谢

问题在于锁屏。假设应用程序已启动并正在运行,但用户锁定设备或设置超时以锁定屏幕的选项过期,设备锁定。您可以点击电源,滑动解锁,然后看到应用程序仍在运行。但是,在锁定期间,我假设应用程序已暂停

当您最小化应用程序时,Windows会等待几秒钟,以查看用户是否会切换回该应用程序。如果您在此时间窗口内未切换回,并且没有扩展执行、后台任务或活动赞助执行处于活动状态,则Windows应用程序将关闭。只要应用程序中没有活动的扩展执行会话等,当出现锁屏时,应用程序也会暂停。有关更多详细信息,请参阅

我假设当锁屏接管并且我的应用程序被挂起时,我将不再获得我的OnPositionChanged事件?这是如何处理的其他事情,如轮流导航,它仍然会跟踪你的位置,即使应用程序暂停或锁定屏幕打开

根据您的要求,您可以使用
ExtendedExecutionReason.LocationTracking
在最小化的同时运行应用程序。例如,如果要实现逐轮导航,可以参考以下代码

如果应用程序需要定期从地理定位器记录位置,请在创建ExtendedExecutionSession时指定ExtendedExecutionReason.LocationTracking。用于健身跟踪和导航的应用程序需要定期监控用户的位置,并应使用此原因

有关更多详细信息,请参阅和

问题在于锁屏。假设应用程序已启动并正在运行,但用户锁定设备或设置超时以锁定屏幕的选项过期,设备锁定。您可以点击电源,滑动解锁,然后看到应用程序仍在运行。但是,在锁定期间,我假设应用程序已暂停

当您最小化应用程序时,Windows会等待几秒钟,以查看用户是否会切换回该应用程序。如果您在此时间窗口内未切换回,并且没有扩展执行、后台任务或活动赞助执行处于活动状态,则Windows应用程序将关闭。只要应用程序中没有活动的扩展执行会话等,当出现锁屏时,应用程序也会暂停。有关更多详细信息,请参阅

我假设当锁屏接管并且我的应用程序被挂起时,我将不再获得我的OnPositionChanged事件?这是如何处理的其他事情,如轮流导航,它仍然会跟踪你的位置,即使应用程序暂停或锁定屏幕打开

根据您的要求,您可以使用
ExtendedExecutionReason.LocationTracking
在最小化的同时运行应用程序。例如,如果要实现逐轮导航,可以参考以下代码

如果应用程序需要定期从地理定位器记录位置,请在创建ExtendedExecutionSession时指定ExtendedExecutionReason.LocationTracking。用于健身跟踪和导航的应用程序需要定期监控用户的位置,并应使用此原因

有关更多详细信息,请参阅和


您是否已经运行某种测试来验证应用程序是否已挂起?在使用锁定屏幕测试应用程序时,您遇到了哪些错误?没有具体测试。我要离开MSDN文档,我读到它说,如果你的应用程序不在前台,它就在后台或挂起,除非你特别做了后台任务或其他事情。你是否已经运行了某种测试来验证应用程序是否挂起?在使用锁定屏幕测试应用程序时,您遇到了哪些错误?没有具体测试。我要离开MSDN文档,我读到它说,如果你的应用程序不在前台,它就在后台或挂起,除非你特别做一些事情
private async void StartTbTNavigationSession()
{
  using (var session = new ExtendedExecutionSession())
  {
    session.Reason = ExtendedExecutionReason.LocationTracking;
    session.Description = "Turn By Turn Navigation";
    session.Revoked += session_Revoked;
    var result = await session.RequestExtensionAsync();
    if (result == ExtendedExecutionResult.Denied
    {
      ShowUserWarning("Background location tracking not available");
    }
    // Do Navigation
    var completionTime = await DoNavigationSessionAsync(session);
  }
}