【发布时间】:2013-05-30 00:27:25
【问题描述】:
在我的应用程序中,我有一个 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);
因为我现在只需要该位置,并且下次再次调用 Web 服务时,我只需再次获取它。但是,即使我在后台运行了一项服务,该服务使用GPS 并获得正确的位置,调用
locationManager.getLastKnownLocation(provider);
当我创建 Web 服务以获取位置时,它给了我一个陈旧的位置,而不是当前的位置。现在我想,因为我已经在另一个服务中运行了一个 locationmanager,所以每次调用 onLocationChanged 时,getLastKnownLocation 都会更新到正确的位置,但显然情况并非如此,这对我来说毫无意义。
所以我现在的问题是我如何才能在我的IntentService 中获得正确的位置,因为我不能依赖getLastKnownLocation
我不需要每次更改位置时都知道位置我只需要知道在我进行 Web 服务调用时它是什么,因此启动另一个位置管理器似乎不是一个好主意。我能想到的解决这个问题的唯一方法是将我的其他服务中的位置存储在SharedPreferences 中,然后抓取其中的任何内容,但这似乎有点老套,我不喜欢老套。
有什么想法吗?
【问题讨论】:
-
只是一个建议:如果可以的话,您应该使用 FusedLocationProvider。 developer.android.com/google/play-services/location.html
-
@hwrdprkns 我试过了,但是 IntentService 在
onConnect被调用之前结束,抛出一个IllegalStateExcepion说我需要在尝试调用onConnect之前调用onConnect所以基本上服务正在获取在我到达之前就被摧毁了