Android Location API:获取提供商状态

时间:2011-03-10 15:33:12

标签: android

Android中获取位置提供商状态的最佳方式是什么?注册LocationListener以进行位置更新时,只要状态发生更改,就会调用onStatusChanged(String provider, int status, Bundle extras)回调。但是,我没有找到获取当前状态(AVAILABLEOUT_OF_SERVICETEMPORARILY_UNAVAILABLE)的方法,而无需注册位置更新。 isProviderEnabled方法只是指示提供程序是否通常打开(在设备的设置中),因此可能会返回true,尽管提供程序已停止服务...是否有其他方法可以执行此操作?

另一个问题:是否可以在不注册位置更新的情况下监听状态更新?我想听一个特定的提供商的位置,但同时检查其他人是否可用。我目前的解决方法是将最小时间和距离设置为一个非常高的值,但我想知道是否有更好的解决方案......

感谢您的任何提示!

顺便说一下:如果可能,解决方案应该适用于Android 1.1

1 个答案:

答案 0 :(得分:2)

如果您对该位置不感兴趣,为什么还要获得GPS状态?

但是,您至少可以获得GPS状态的某些方面:

final GpsStatus gs = this.locationManager.getGpsStatus(null);
int i = 0;
final Iterator<GpsSatellite> it = gs.getSatellites().iterator();
while( it.hasNext() ) {
    it.next();
    i += 1;
}
this.gpsSatsAvailable = i;

参见http://developer.android.com/reference/android/location/GpsStatus.html 您将需要至少4颗卫星才能进行精确的2D修复,5颗用于3D修复(包括高度)。 根据文档,您应该从onStatusChanged()访问状态以获取一致的信息。它也适用于此方法之外。链接的文档解释了可能出现的问题。 当然,您仍然需要侦听位置更新,因为GPS状态不会更新。