3

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

有任何想法吗?

4

1 回答 1

3

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

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

于 2013-06-03T19:44:25.027 回答