在我的应用中,我设置了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服务获取位置时,它会给我一个陈旧的位置,而不是当前的位置。现在我认为,因为我已经有一个位置管理器在另一个服务中运行,getLastKnownLocation
每次调用onLocationChanged
时都会更新到正确的位置,但显然情况并非如此我
所以我现在的问题是如何在IntentService
中找到正确的位置,因为我不能依赖getLastKnownLocation
每次更改时我都不需要知道位置我只需要知道在进行Web服务调用时它是什么,所以启动另一个位置管理器似乎不是一个好主意。我唯一能想到解决这个问题的方法是将我的其他服务中的位置存储在SharedPreferences
中,然后抓住那里的任何东西,但这看起来有点乱,而且我不喜欢hacky。
任何想法?
答案 0 :(得分:3)
只有当任何应用程序请求某个位置(应用程序可以是您的或设备上的任何其他应用程序)时,android的最后一个已知位置才会更新。您必须实现位置侦听器,然后使用locationManger.requestLocationUpdates(provider,minTime,minDistance,locationListener)来请求位置更新。 android系统将根据您的请求获取位置更新,并为所有要使用的应用程序设置lastKnownLocation。
我能想到没有设置lastKnownLocation的唯一原因是android系统无法获取该位置。检查是否已启用为位置更新请求的提供程序。此外,您可以使用被动提供程序来捎带其他应用程序的位置请求,并且只有在特定超时期限内没有更新时才会主动查找位置(这种方法应该更好,不断尝试获取成本高昂的位置更新)。 / p>