在我的应用程序中,我将AlarmManager设置为每隔一段时间运行一次IntentService,以对我的服务器进行WebService调用,以发送您的当前位置
警报启动时,我还将启动一个具有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,所以每次调用onLocationChanged时,getLastKNownLocation都会被更新到正确的位置,但是显然不是这种情况,这对我来说毫无意义.
所以现在我的问题是如何才能在我的IntentService中获得正确的位置,因为我不能依赖getLastKNownLocation
我不需要每次更改位置都知道位置,我只需要知道在进行Web服务调用时的位置,因此启动另一个位置管理器似乎不是一个好主意.我唯一能想到的解决方案是将其他服务中的位置存储在SharedPreferences中,然后仅抓取其中的任何内容,但这似乎有点Hacky,但我不喜欢Hacky.
有任何想法吗?
解决方法:
androID的最后一个已知位置仅在任何应用请求位置时才更新(应用可以是您的,也可以是设备上的其他任何位置).您必须实现位置侦听器,然后使用locationmanger.requestLocationUpdates(provIDer,minTime,mindistance,locationListener)来请求位置更新. AndroID系统将根据您的请求获取位置更新,并为所有要使用的应用设置lastKNownLocation.
我能想到未设置lastKNownLocation的唯一原因是androID系统无法获取位置.检查是否已启用请求位置更新的提供程序.您也可以使用被动提供程序在其他应用程序的位置请求上requests带,并仅在特定超时时间内没有更新时才主动寻找位置(这种方法应该比不断尝试获取昂贵的位置更新更好).
总结以上是内存溢出为你收集整理的android-getLastKnownLocation不是实际位置全部内容,希望文章能够帮你解决android-getLastKnownLocation不是实际位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)