其他分享
首页 > 其他分享> > android-getLastKnownLocation不是实际位置

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