[英]Windows Phone 8 Geolocator can't set desiredAccuracy = High AND tie into PositionChanged event
[英]Windows Phone 8 - Geolocator PositionChanged listener dies after some time
我正在使用Geolocator对象设置PositionChanged侦听器
var geolocator = new Geolocator();
geolocator.PositionChanged += Geolocator_PositionChanged;
它工作正常一段时间。 但经过一段时间没有用户互动(+ - 4小时)它停止接收位置变化,我认为因为WP8只是杀死它。 这可能是从ms开始的,但这对我的app模型来说太可怕了。
我所做的是另外设置PeriodicTask并发送位置。 这样运行没有任何问题,但如果用户改变他的位置,我无法真正跟踪它。
问题是:无论如何在没有用户交互的情况下唤醒这个Geolocator? 它可以通过PeriodicTask甚至是PositionChanged。
我已经尝试在PositionChanged委托中已经实例化了一个新的Geolocator,但这不起作用。
很感谢任何形式的帮助。 谢谢!
它似乎是某种GC杀死/禁用该实例。
尝试使用geolocator.addEventListener("statuschanged", onStatusChanged);
当状态为Windows.Devices.Geolocation.PositionStatus.disabled
或Windows.Devices.Geolocation.PositionStatus.notAvailable
时,重新启动对象。
请参阅Geolocator.StatusChanged | statuschanged事件了解更多详情。
希望我帮忙
您是否在GetGeopositionAsync
调用中指定了超时? 根据在底部的最后一个注释这个帖子 ,这个代码修复了一个问题GetGeopositionAsync
呼叫不返回。 它可能是相关的。
public Task GetCurrentPosition()
{
return Task.Run(() =>
{
if (_geolocator == null)
{
_geolocator = new Geolocator { DesiredAccuracy = PositionAccuracy.High };
}
Geoposition geoposition = null;
ManualResetEvent syncEvent = new ManualResetEvent(initialState: false);
IAsyncOperation asyncOp = _geolocator.GetGeopositionAsync();
asyncOp.Completed += (asyncInfo, asyncStatus) =>
{
if (asyncStatus == AsyncStatus.Completed)
{
geoposition = asyncInfo.GetResults();
}
syncEvent.Set();
};
syncEvent.WaitOne();
return geoposition.Coordinate;
});
}
可能垃圾收集器发现它未使用并且已杀死或至少禁用省电功能。
您使用的大多数硬件资源都有调用方法
addEventListener
这是一种通知该资源的方式:“嘿!我想得到你的更新,所以不要死”。 这是观察对象并异步获取更新的非常常见的模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.