我目前正在使用GeoCordinateWatcher,它抽象出用于检索位置的信息和提供状态的速度(禁用/准备/ nodata /初始化),但这就是全部。
我见过一些像RunKeeper这样的应用程序有一个GPS信号强度指示器但是我不确定它是否准确或是否是根据GeoCordinate的HorizontalAccuracy属性计算的
注意:我已阅读此链接: How to read GPS signal strength in Windows Mobile?
但这是在处理WP6.5,我认为WP7没有帮助。
答案 0 :(得分:5)
根据经验(作为RunKeeper Windows Phone应用程序的开发人员),您无法直接访问GPS信号强度,但您可以使用HorizontalAccuracy显示相对强度指示器。
我使用Rx Extensions在GeoCoordinateWatcher上提供可观察的位置流,然后在其上创建一个可观察的精度流,这样我就可以订阅与位置变化分开的精度变化(而不是每次都检查和更新)位置)。
// Extension method.
public static IObservable<GeoPositionChangedEventArgs<:GeoCoordinate>> GetPositionChangedEventStream(this GeoCoordinateWatcher watcher)
{
return Observable.Create<GeoPositionChangedEventArgs<GeoCoordinate>>(observable =>
{
EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>> handler = (s, e) =>
{
observable.OnNext(e);
};
watcher.PositionChanged += handler;
return () => { watcher.PositionChanged -= handler; };
});
}
// Usage:
var positionStream = this._watcher.GetPositionChangedEventStream();
var accuracyStream = positionStream.Select(p => p.Position.Location.HorizontalAccuracy);
...
accuracyStream.Subscribe((accuracy) =>
{
// Do something with the accuracy.
});