添加lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);
它将开始使用网络获取位置,但是一旦您从隧道出来,它将开始从网络和 GPS 获取。使用location.getProvider()
您应该能够区分它是gps还是网络。
如果您的 GPS 状态在应用程序运行时没有发生变化(例如,如果您始终在室内没有 GPS 定位),则某些设备不会触发该OnStatusChanged()
方法。
如果您在应用程序运行时更改 GPS 状态(例如,您在室内但无法获得定位,然后走到外面却可以获得定位,反之亦然),则该OnStatusChanged()
方法应在所有设备上触发。
如果您想使用一个完全工作的开源应用程序作为示例,请尝试由 Android 团队的 Mike Lockwood 编写的 GPSTest。
Google Play 上的 GPS 测试
GPSTest 的源代码
有关即使您的设备无法修复也会不断更新的 GPS 的更多详细信息,您可能需要注册一个 GPSStatusListener。
在您的活动中,声明类变量:
private LocationManager mService;
private GpsStatus mStatus;
...并添加处理 GPSStatus 更改的方法:
public void onGpsStatusChanged(int event) {
mStatus = mService.getGpsStatus(mStatus);
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_STOPPED:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// Do Something with mStatus info
break;
}
}
然后在 Activity 的 OnCreate() 中注册 GPSStatusListener:
mService = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mService.addGpsStatusListener(this);
在 GPSTest 应用程序中,当前可用卫星的列表显示在屏幕上,每次 GPSStatusListener 更新都基于此代码。
这样,即使您的手机无法获得 GPS 定位(因此可能不会触发 ),您也会收到系统 GPS 状态的主动OnStatusChanged
更新LocationListener
。