【问题标题】:Location tracking when app is in background in Windows 10?应用程序在 Windows 10 中处于后台时的位置跟踪?
【发布时间】:2016-03-30 11:49:41
【问题描述】:

我是 Windows 10 的新手,目前正在开发基于位置的应用程序。我的要求是在特定时间间隔内跟踪用户位置,并每 10 分钟向服务器发送一次数据。有人可以建议这在 Windows 10 中是否可行?我不知道这一点。

更新

我也想在应用程序在后台时执行上述操作。我尝试了以下代码

 protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        if (e.NavigationMode == NavigationMode.New)
        {
            var extendedSession = new ExtendedExecutionSession();
            extendedSession.Reason = ExtendedExecutionReason.LocationTracking;
            extendedSession.Description = "Location tracking";

            ExtendedExecutionResult result = await extendedSession.RequestExtensionAsync();
            if (result == ExtendedExecutionResult.Allowed)
            {
                Debug.WriteLine("Background execution approved");
            }
            else
            {
                Debug.WriteLine("Background execution denied");
            }

            Geolocator locator = new Geolocator();
            locator.DesiredAccuracyInMeters = 0;
            locator.MovementThreshold = 500;
            locator.DesiredAccuracy = PositionAccuracy.High;
            locator.PositionChanged += Locator_PositionChanged;
        }
    }

  private void Locator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
    {
        Debug.WriteLine(args.Position.Coordinate.Latitude.ToString("0.00000000") + " " + args.Position.Coordinate.Longitude.ToString("0.00000000"));
        if (MCSManager.Instance.userDetails != null && MCSManager.Instance.userDetails.LOC_TRACK_ENABLED.Equals("1") && userSettings.Values.ContainsKey(Constants.USER_ID))
        {
            DatabaseManager dbManager = new DatabaseManager();
            Location_Tracking location_tracking = WebserviceED.StoreLocationData(args.Position.Coordinate.Latitude.ToString(),
                args.Position.Coordinate.Longitude.ToString(), WebserviceED.getTimestamp(), args.Position.Coordinate.Accuracy.ToString());
            var insertSuccessfull = dbManager.insertSingleRecord(location_tracking);
        }
    }

在这些中,我仅在应用程序处于前台或最小化时才能获取位置详细信息。如果我杀死该应用程序,它不会给我位置详细信息。另外,请帮助我如何在后台任务中使用它以及如何触发时间触发器以将数据发送到服务器,即使用户杀死了应用程序?

另外,我们可以使用多个后台任务吗?我想使用一个用于 TimeTrigger 将数据发送到服务器,另一个用于推送通知。

【问题讨论】:

  • 有类似情况,见Real time GPS UWP
  • 您好,请在此页面上听取其他人的建议。您将需要了解地理定位和后台任务的基础知识。恐怕要大量阅读和学习。
  • 编辑:在此页面上听取 Harshad Vekariya 的建议。您将需要了解地理定位和后台任务的基础知识。很多阅读和学习,我害怕。您在Sharpgis 下面的代码示例对您没有帮助。您需要做的是在 UWP 中 100% 可能,并且请注意,您只能在连接可用时将数据发送到服务器。祝你好运!

标签: c# win-universal-app windows-10


【解决方案1】:

完全可以在 Windows 10 中访问用户的位置。 它可以从不同的来源访问,例如;

  • GPS:大约 10 米以内
  • Wi-Fi:大约 30 米到 500 米之间
  • 手机信号塔:大约在 300 米到 3,000 米之间
  • IP 地址:大约在 1,000 米到 5,000 米之间

有关技术理解,您可以参考以下链接。

https://msdn.microsoft.com/library/windows/apps/windows.devices.geolocation.aspx

对于来自频道的视频,请参考

https://channel9.msdn.com/Series/Windows-10-development-for-absolute-beginners/UWP-059-UWP-Weather-Accessing-the-GPS-Location

这些是值得参考的好文章。

更多技术细节:

https://msdn.microsoft.com/en-us/library/windows/apps/mt219698.aspx

还有一些例子,

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/MapControl

【讨论】:

【解决方案2】:

完全有可能。但是如果用户拒绝给出位置,那么你就不能。

更新

后台跟踪需要使用ExtendedExecutionSession,这里的代码示例:http://www.sharpgis.net/post/2015/03/29/Using-Windows-10s-Extended-Execution

【讨论】:

  • 这基本上就是你需要的:sharpgis.net/post/2015/03/29/…
  • @thang241099 这显示在后台跟踪位置,但并不能确认我们可以每 10 分钟向服务器发送一次数据。请建议
  • 您可以将其保存到共享设置文件夹并在扩展会话或后台任务中上传。
  • 我会将所有位置存储在数据库中,并通过使用 Web 服务每 10 分钟发送到服务器。这应该是可能的吧?
  • 我尝试了您提供的链接中的示例,但是当应用程序处于前台时它可以工作,而在后台它在最近的应用程序中可用(仍然打开但最小化)。如果我杀死该应用程序,那么它不会向我提供位置详细信息。我签入了设置,后台进程已为我的应用打开。
【解决方案3】:

在这些中,我仅在应用程序处于前台或最小化时才获得位置详细信息。如果我杀死该应用程序,它不会给我位置详细信息。

Extended Execution 要求用户打开您的应用程序并将其放在他们知道它正在运行的后台堆栈中。这里是关于扩展执行的教程:https://docs.microsoft.com/en-us/windows/uwp/launch-resume/run-minimized-with-extended-execution

另外,请帮助我如何在后台任务中使用它以及如何触发时间触发器以将数据发送到服务器,即使用户杀死了应用程序?

扩展执行位置跟踪不能在后台任务中使用。但是,您可以使用 LocationTrigger 并在用户每次移出地理围栏区域时记录新位置。截至周年更新位置触发器和时间触发器可以注册为进程内或进程外任务:https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-an-inproc-background-task

这是进程内后台任务的示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundActivation

另外,我们可以使用多个后台任务吗?我想使用一个用于 TimeTrigger 将数据发送到服务器,另一个用于推送通知。

是的,您可以使用 BackgroundTaskBuilder 注册任意数量的不同类型的任务,它们可以在您的应用程序进程中运行或作为单独的后台任务进程运行。

BackgroundTaskBuilder的使用教程如下:https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task

这是进程外后台任务的示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundTask

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多