Windows Phone 8 -地理定位器位置改变的监听器在一段时间后死亡
本文关键字:监听器 一段时间 改变 Phone -地 位置 定位器 Windows | 更新日期: 2023-09-27 18:11:14
我正在使用
在地理定位器对象中设置PositionChanged侦听器var geolocator = new Geolocator();
geolocator.PositionChanged += Geolocator_PositionChanged;
它可以正常工作一段时间。但在没有用户交互的一段时间后(+- 4小时),它停止接收位置变化,我想是因为WP8直接杀死了它。这可能是ms想要的,但这对我的应用程序模型来说是可怕的。
我所做的是另外设置一个PeriodicTask并发送位置。这个运行起来没有问题,但是如果用户改变了他的位置,我就无法真正跟踪它了。
问题是:有没有办法在不需要用户交互的情况下唤醒这个地理定位器?它可以通过PeriodicTask甚至在PositionChanged中设置。
我已经尝试实例化一个新的地理定位器已经在PositionChanged委托,但这不起作用
任何帮助都是非常感激的。谢谢你!似乎是某种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
这是通知资源的一种方式:"嘿!我想从你那里得到更新,所以不要死。"这是一种非常常见的观察对象并异步获取更新的模式。
看看http://en.wikipedia.org/wiki/Observer_pattern