【问题标题】:Windows Phone 8.1 Recording GPS behind the lock screenWindows Phone 8.1 在锁屏后记录 GPS
【发布时间】:2014-11-15 10:47:51
【问题描述】:

首先我要声明的是,我正在创建的应用程序是 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。需要计时器,但目前为测试目的设置了时间范围。

【问题讨论】:

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


    【解决方案1】:

    当应用程序被挂起时,所有时间也都停止了,应用程序根本没有获得任何 CPU 时间,这意味着没有代码可以执行。

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

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

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

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

    【讨论】:

    • 提供的诺基亚链接现已失效。
    【解决方案2】:

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

    如果您确实希望它在它不是前台应用程序时收集信息,处理此问题的一种方法是执行 Jogy 所说的并创建一个在计时器上运行的后台任务。但是你不能每 20 秒做一次,每 15 分钟做一次就差不多了,除非你有 SensorCore 手机。如果您购买的是带有最新固件更新的 SensorCore 手机(最新的诺基亚/微软手机)(请咨询运营商以确保您拥有最新的诺基亚发布的固件),即使在后台,您也可以每 30 秒获得一次更新.

    SensorCore 还将存储最近 10 天的信息,以便您的应用首次启动时会保存历史记录。但是请注意,您不是每 30 秒请求一次更新,如果其他人请求更新(即驾驶应用程序或其他东西),您会得到更新,它只是让您访问某些应用程序请求的位置。请参阅 SDK 文档here

    【讨论】:

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