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