gpt4 book ai didi

android - getLastKnownLocation 不是实际位置

转载 作者:太空狗 更新时间:2023-10-29 12:47:09 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com