ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-getLastKnownLocation不是实际位置

2019-11-23 07:28:17  阅读:259  来源: 互联网

标签:locationmanager android


在我的应用程序中,我将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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有