如果用户没有激活GPS,他仍然可以在手机设置中将Wifi /网络作为位置源激活,因此您也可以使用这些数据。
你总是可以通过
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
和/或
locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
它会保存在设备的最后已知位置,这可以从获得GPS或网络的最后已知位置应用程序或以前使用GPS的任何其他应用程序。
实际上,您可以使用两个具有不同提供者的位置管理器:一个使用GPS_PROVIDER,另一个使用NETWORK_PROVIDER。 Gps更准确,但通常只能在室外自由空间下工作,为什么NETWORK_PROVIDER在室内工作,但不太准确。此外,GPS可能需要一段时间,直到初始化后(有时即一分钟或更长时间)获得第一次修复,而网络几乎立即得到该位置。
你应该阅读这篇文章,这是非常详细,有示例代码: What is the simplest and most robust way to get the user's current location on Android?
关于第二个问题:停止该服务之前 ,你也应该注销位置监听器。您可以在onPause或onDestroy上执行此操作。
locationManager.removeUpdates(baseLocationListener)
或
locationManager.removeAllUpdates()
我觉得你的情况使用getLastKnowLocation()的罚款。然而,如果你想明确知道GPS状态,你可以实现一个GPS状态监听器,然后使用类似下面的东西,它告诉你GPS是否有任何卫星修复 - 但如前所述,我不知道我认为这是非常必要的。
final class GpsStatusListener implements GpsStatus.Listener {
public void onGpsStatusChanged(int i) {
if (i==GpsStatus.GPS_EVENT_FIRST_FIX) {
Log.d(AskTingTing.APP, "gpsx.fixed.");
for (GpsSatellite sat:locationManager.getGpsStatus(null).getSatellites()) {
Log.d(AskTingTing.APP, "gpsx.GpsStatus.Sat.fixed: " + sat.usedInFix());
}
}
}
}
查看上面的链接,获取一个好的代码示例。
谢谢你的反应,我想我的服务提供商也跟踪NETWORK_PROVIDER(这将使用手机信号塔,是吗?),如果GPS没有返回值(室内需要预先),我会使用这些数据。 – Andrew 2010-08-06 19:36:21
是的,网络使用手机信号塔或IP地址或两者兼而有之。请参阅此链接了解详细说明:http://forum.sdx-developers.com/android-2-1-development/cdma-lockup-wifi-use-wireless-networks-and -gps!/ msg22834 /#msg22834“使用无线网络=这只是指出固定小区站点的经纬度,它基于小区站点T1的IP地址。它只使用一个站点,即您当前所在的站点,这就是您在地图上看到的,而不是您的位置,而是您所在的手机站点。“我建议同时使用GPS和网络提供商 – 2010-08-06 19:39:26
“我的服务提供商还跟踪NETWORK_PROVIDER”:它不依赖于您的网络提供商,他们总是跟踪位置。关于手机用户是否已在设置/位置和安全性下激活了它 – 2010-08-06 19:40:28