Windows Phone 8.1在锁定屏幕后面录制GPS

时间:2014-11-15 10:47:51

标签: c# timer gps windows-phone-8.1 lockscreen

首先我想说的是我正在创建的应用程序是 Windows Phone 8.1 RT Store应用程序(不是Silverlight应用程序)

我目前正在创建一个应用程序,作为团队成员的大学最后一年项目的一部分。我遇到的问题是,对于部分应用程序,我需要能够在地图上记录区域。 IE浏览器。用户在特定区域内走动,我们将该区域存储在应用程序的其他部分中。

我目前能够使用GPS记录位置,并能够在地图上准确显示。导致我出现问题的区域是需要解锁屏幕并启动屏幕才能使用。一旦手机锁定应用程序(显然)暂停,我无法记录位置。

我一直在网上看,并且已经看到以前允许应用程序在锁定屏幕后面运行的方法已经被Windows Phone 8.1删除了,所以我的问题是有没有人找到任何其他方法?

这是我目前拥有的代码..我使用调度计时器每20秒记录一次GPS,然后我将该位置添加到我拥有的列表中。

代码:

    public void getLoc()
    {


        Debug.WriteLine("Start");
        startButtonEnabled = false;
        stopButtonEnabled = true;


        FindGPS();


        dispatcherTimer.Tick += FindGPS_Event;
        dispatcherTimer.Interval = new TimeSpan(0, 0, 20);
        dispatcherTimer.Start();
    }


    private void FindGPS_Event(object sender, object o)
    {
        FindGPS();
    }
    private async Task FindGPS()
    {
        Debug.WriteLine("Find GPS");
        try
        {
            Geoposition position = await geolocator.GetGeopositionAsync();
            location.Longitude = position.Coordinate.Point.Position.Longitude;
            location.Latitude = position.Coordinate.Point.Position.Latitude;
            location.Accuracy = position.Coordinate.Accuracy;
            location.GeoLocation =
                new Geopoint(new BasicGeoposition() {Latitude = location.Latitude, Longitude = location.Longitude});
            zoomLevel = 18;
        }
        catch (UnauthorizedAccessException)
        {
            Debug.WriteLine("No Data");
        }
        catch (TaskCanceledException)
        {
            Debug.WriteLine("Cancelled");
        }
        finally
        {
            Pushpin icon = new Pushpin()
            {
                Point =
                    new Geopoint(new BasicGeoposition()
                    {
                        Latitude = location.Latitude,
                        Longitude = location.Longitude
                    }),
                Name = "Location"
            };
            location.IconOnMap.Add(icon);
        }
    }
按下按钮时会调用

getLoc,我有另一个停止dispatchTimer的按钮。需要计时器,但目前设置的时间范围是为了测试目的。

2 个答案:

答案 0 :(得分:1)

当应用程序暂停时,所有时间也都会停止,同时应用程序根本没有任何CPU时间,这意味着没有代码可以执行。

如果您想在手机锁定时进行处理,则必须执行后台任务:

在Windows Phone 8.1中有一个新的Geofencing API,它允许您定义感兴趣的区域,并在手机进入或离开这些区域时调用后台任务。

此外,您可以让计时器调用后台任务(每15分钟一次),然后记录当前位置。

最后,您可以使用诺基亚传感器核心SDK:http://developer.nokia.com/resources/library/Lumia/sensorcore-sdk.html。它可能提供您想要的,但它只适用于Lumia手机。

答案 1 :(得分:0)

听起来您只是想在应用运行时阻止锁定屏幕出现。这是另一篇文章,告诉你如何做到这一点(查看8.1 RT应用程序的几个条目): Prevent automatic screen lock on Windows Phone 8

如果你确实希望它在不是前台应用程序时收集信息,那么处理这个问题的一种方法是做一个Jogy说并创建一个在计时器上运行的后台任务。但是除非你有一台SensorCore手机,否则你每20秒钟就能做到这一点,每15分钟一次就能达到最佳状态。如果您获得SensorCore手机(最新的诺基亚/微软手机),以及最新的固件更新(请与运营商联系以确保您拥有最新的诺基亚发布固件),即使在后台,您也可以每30秒获得一次更新

SensorCore还会存储最近10天的信息,因此第一次启动应用时,它会有历史记录。但请注意,您不是每30秒请求更新一次,如果有其他人请求它们(即驱动应用程序或其他内容),您可以获取更新,它只是让您访问某些应用程序请求的位置。请参阅SDK文档here