在Windows Phone 7上有一种方法可以获得GPS信号的当前强度吗?

时间:2011-08-25 09:23:34

标签: windows-phone-7 gps

我目前正在使用GeoCordinateWatcher,它抽象出用于检索位置的信息和提供状态的速度(禁用/准备/ nodata /初始化),但这就是全部。

我见过一些像RunKeeper这样的应用程序有一个GPS信号强度指示器但是我不确定它是否准确或是否是根据GeoCordinate的Horizo​​ntalAccuracy属性计算的

注意:我已阅读此链接: How to read GPS signal strength in Windows Mobile?

但这是在处理WP6.5,我认为WP7没有帮助。

1 个答案:

答案 0 :(得分:5)

根据经验(作为RunKeeper Windows Phone应用程序的开发人员),您无法直接访问GPS信号强度,但您可以使用Horizo​​ntalAccuracy显示相对强度指示器。

我使用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.
            });