android - getLastKnownLocation 不是实际位置

标签 android locationmanager

在我的应用程序中,我有一个 AlarmManager 设置为每隔一段时间运行一个 IntentService 以向我的服务器发送您的当前位置的 WebService 调用

启动警报后,我还会启动一个 Service,它有一个 LocationManager 来跟踪本地位置。

当我对我使用的服务器进行网络服务调用时

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);

        String provider = locationManager.getBestProvider(criteria, true);
        Location lastKnownLocation = locationManager.getLastKnownLocation(provider);

因为我只需要此时的位置,下次再次调用网络服务时,我只需再次获取它。但即使我有一项服务在我的后台运行,它使用 GPS 并获得正确的位置,调用

locationManager.getLastKnownLocation(provider);

当我创建网络服务来获取位置时,它会给我一个陈旧的位置,而不是当前位置。现在我认为,因为我已经在另一个服务中运行了一个位置管理器,所以每次调用 onLocationChanged 时,getLastKnownLocation 都会更新到正确的位置,但这显然不是对我来说毫无意义的情况。

所以我现在的问题是如何在我的 IntentService 中获得正确的位置,因为我不能依赖 getLastKnownLocation

我不需要在位置每次发生变化时都知道它我只需要知道在调用 Web 服务时它是什么,因此启动另一个位置管理器似乎不是一个好主意。我唯一能想到的解决方法是将我的其他服务的位置存储在 SharedPreferences 中,然后抓取其中的任何内容,但这看起来有点 hacky,我不喜欢 hacky。

有什么想法吗?

最佳答案

仅当任何应用程序请求位置(应用程序可以是您的或设备上的任何其他应用程序)时,Android 的最后已知位置才会更新。您必须实现位置监听器,然后使用 locationManger.requestLocationUpdates(provider, minTime, minDistance, locationListener) 来请求位置更新。 Android 系统将根据您的请求获取位置更新,并设置所有应用程序使用的 lastKnownLocation。

我能想到没有设置 lastKnownLocation 的唯一原因是 android 系统无法获取位置。检查请求位置更新的提供商是否已启用。您还可以使用 Passive Provider 搭载其他应用程序的位置请求,并仅在特定超时期限内没有更新时才主动寻找位置(这种方法应该比不断尝试获取成本高昂的位置更新更好)。

关于android - getLastKnownLocation 不是实际位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16903772/

相关文章:

minTime > 0 的 android LocationManager.requestLocationUpdates 未按预期工作

java - 指定位置管理器在 Android 中广播当前位置的时间间隔

java - 如何单独自定义TabLayout选项卡?

android - onLocationChanged() 从未调用过

java - 即使应用程序未运行,如何每天更新 TextView?

android - 在 Eclipse 中看不到图形布局

java - 融合位置管理器 API 准确性

android - 如何使用android查找最后位置

android - 通过长按主页按钮启动应用程序总是重新启动应用程序而不是将其置于前台

android - Firebase 相当于 MySQL 的 NOW()?