android-getLastKnownLocation不是实际位置
作者:互联网
在我的应用程序中,我将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带,并仅在特定超时时间内没有更新时才主动寻找位置(这种方法应该比不断尝试获取昂贵的位置更新更好).
标签:locationmanager,android 来源: https://codeday.me/bug/20191123/2065893.html