在我的应用程序中,我有一个AlarmManager
设置来IntentService
经常运行一个 WebService 调用到我的服务器发送你当前的位置
当警报启动时,我还启动了Service
一个LocationManager
在本地跟踪位置的程序。
当我对我的服务器进行 Web 服务调用时,我使用
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);
因为我现在只需要该位置,而下次再次调用 Web 服务时,我只需再次获取它。但是,即使我在后台运行了一项服务,该服务使用GPS
并获得了正确的位置,它仍然出现,调用
locationManager.getLastKnownLocation(provider);
当我通过 Web 服务获取位置时,它给了我一个陈旧的位置,而不是当前的位置。现在我想,因为我已经在另一个服务中运行了一个 locationmanager,所以getLastKnownLocation
每次调用它都会更新到正确的位置,onLocationChanged
但显然情况并非如此,这对我来说毫无意义。
所以我现在的问题是我怎样才能得到我的正确位置,IntentService
因为我不能依赖getLastKnownLocation
我不需要每次更改位置时都知道位置我只需要知道在我进行 Web 服务调用时它是什么,因此启动另一个位置管理器似乎不是一个好主意。我能想到的唯一解决这个问题的方法是将我的其他服务中的位置存储在其中,SharedPreferences
然后抓取其中的任何内容,但这似乎有点 hacky,我不喜欢 hacky。
有任何想法吗?