我有一个地图视图,我想在其中跟踪用户的当前位置。GPS 以及“使用无线网络”在我的手机设置中被激活。不过,由于我在室内,我没有 GPS 定位,因此位置是通过网络确定的;wifi点是可用的。
我正在运行 Google Maps 应用程序以及我的应用程序。
奇怪的是,谷歌地图和我的应用程序之间的当前位置不同,其中谷歌地图非常准确,而在我的应用程序中,位置不知何故偏离了几百米。
在我的应用程序中,我基本上执行以下操作(现在出于调试目的):
1)最初在地图上放置一个标记:通过检索地理点locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
2)最初在地图上放置另一个标记:通过检索地理点locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
这会将两个提供商的最后已知位置放在地图上(最终从我的应用程序外部最后知道)。
3)然后对于定期更新(因为我在这里无论如何都没有获得 GPS 定位),我这样做:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, baseLocationListener);
您可以看到在这两种情况下我通过 0 参数的频率和距离。
在应用清单中,授予以下权限:
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION
实际上我的 baseLocationListener 确实被调用了,我在日志中看到了,但是更新的位置在某种程度上与(LocationManager.NETWORK_PROVIDER 的)最后一个已知的当前位置相同,相同的 lat/lng。
我想也许我忽略了某些东西或错过了参数或设置,或者我的代码有错误。因此,我从 Android 市场安装了一些其他(总共 3 个)LBS 应用程序,这些应用程序也显示了当前用户的位置。这些应用程序中显示的当前位置与我的应用程序中的位置相同——它们都相距约 100 米——但至少都相同。
在此处查看屏幕截图: 屏幕截图 http://img33.imageshack.us/img33/8679/mapproblem.png
http://img33.imageshack.us/img33/8679/mapproblem.png
现在我想知道:
1)据我所知,getLastKnowLocation 是系统范围的,而不是应用范围的,为什么谷歌地图和所有其他应用程序中的位置存在差异?
2) 谷歌地图不会更新提供者的 lastKnownLocation 吗?
3) Google 地图是否使用不同于 SDK 中的 GPS_PROVIDER 或 NETWORK_PROVIDER 的其他自定义位置提供程序(即由于许可原因)?
4) 如何使用 NETWORK_PROVIDER 获得与 Google Maps 一样的准确结果?