2011-08-25 30 views
3

我目前正在使用GeoCordinateWatcher提取用于检索位置的信息,并提供它提供状态的速度(禁用/就绪/无数据/初始化),但仅此而已。在Windows Phone 7上是否有获取GPS信号当前强度的方法?

我已经看到了一些应用程序,如RunKeeper有一个GPS信号强度指示器,但我不知道这是否是正确的还是它的基础上的GeoCordinate

注意的Horizo​​ntalAccuracy属性是否计算:我已阅读此链接: How to read GPS signal strength in Windows Mobile?

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

回答

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. 
      }); 
+0

太棒了。 Thanks.Good工作在RunKeeper应用程序也。我一直都在使用它。 –

相关问题