android getLastKnownLocation 返回null

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在使用LocationManager.getLastKnownLocation("gps")获取gps定位的过程中老是报空指针异常 

在网上百度查了不少资料发现这个问题多出现在2.0以上版本 
解决方法多是: 
1.在AndroidManifest.xml中添加

Xml代码  复制代码
  1. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  2. <uses-permission android:name="android.permission.INTERNET" />  
  3. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
[xml]  view plain copy
  1. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  2. <uses-permission android:name="android.permission.INTERNET" />  
  3. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  


2.在emulator control中手动设置经纬度 

但是我的程序这些都写了依旧报空指针 

后来在外国论坛上终于找到一些启发 
一个哥们这样写代码

Java代码  复制代码
  1. LocationManager mgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);   
  2. Location location = mgr.getLastKnownLocation(bundle.getString("provider"));   
  3. while(location  == null)   
  4. {   
  5.   mgr.requestLocationUpdates("gps"600001, locationListener);   
  6. }  
[java]  view plain copy
  1. LocationManager mgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
  2. Location location = mgr.getLastKnownLocation(bundle.getString("provider"));  
  3. while(location  == null)  
  4. {  
  5.   mgr.requestLocationUpdates("gps"600001, locationListener);  
  6. }  


我试了一下还真有效,他的解释是用debug发现getLastKnownLocation()方法不是一次就能定位的,必须多次才能成功。 

但是显然这样用循环一直等待很没效率,所以我重写了MapActivity的方法

Java代码  复制代码
  1.   /**  
  2.     * 这里一定要对LocationManager进行重新设置监听  
  3.     * mgr获取provider的过程不是一次就能成功的  
  4.     * mgr.getLastKnownLocation很可能返回null  
  5.     * 如果只在initProvider()中注册一次监听则基本很难成功  
  6.     */  
  7. @Override  
  8. protected void onResume() {   
  9.     super.onResume();   
  10.     mgr.requestLocationUpdates(bundle.getString("provider"), 600001, locationListener);   
  11. }   
  12.   
  13. @Override  
  14. protected void onPause() {   
  15.     super.onPause();   
  16.     mgr.removeUpdates(locationListener);   
  17. }  
[java]  view plain copy
  1.   /** 
  2.     * 这里一定要对LocationManager进行重新设置监听 
  3.     * mgr获取provider的过程不是一次就能成功的 
  4.     * mgr.getLastKnownLocation很可能返回null 
  5.     * 如果只在initProvider()中注册一次监听则基本很难成功 
  6.     */  
  7. @Override  
  8. protected void onResume() {  
  9.     super.onResume();  
  10.     mgr.requestLocationUpdates(bundle.getString("provider"), 600001, locationListener);  
  11. }  
  12.   
  13. @Override  
  14. protected void onPause() {  
  15.     super.onPause();  
  16.     mgr.removeUpdates(locationListener);  
  17. }  


一样也成功了。。 

在外国技术论坛上找了个解释,个人感觉很贴切: 

The call to request update for a location is not blocking, hence it wont wait there. Also the provider in emulator may not have been started. 

A possible check could be to see if the settings in it disable gps provider ? then send geo fix. 

However, I would use Location Listener, it would be ideal in your case since you need a geo fix to proceed further.Location Listener is Used for receiving notifications from the LocationManager when the location has changed. You can unregister the listener after first geofix. 

Note: It can take some time on device to get current location, and even on device this can return null. 

Android LocationManager定位获取经纬度 项目需要,查找了很久的文件,起初用了公司的红米手机测试,一直不成功,getLastKnownLocation(provider)返回一直为空,后来偶然看到一篇文章说国内安卓手机是不支持android自带的定位API locationManager的。 国内安卓手机locationManager.getLastKnownLocation(locationProvider)为null,原因是国内的手机厂商对android系统进行了改动,将谷歌的服务包删除,上述结果就是讲网络定位服务包缺少的结果,最明显的就.. 阅读详情

相关推荐

如何获取gps卫星导航定位,解决getLastKnownLocation返回null

在用android开发地图导航的时候不知道大家有没有遇到过使用getLastKnownLocation()函数返回的location却总是显示为null的情况,本人在这几天就遇到过这问题,妹的。。。足足折磨我一天的时间,太痛苦咯~~,好在经过一天的上网找资料,查文档,纵欲把问题给解决咯。。。呼~~;好了 废话不多说。。直接上代码。 在开始代码之前,先说明,如果你要在模拟器上测试,并且使用MapV

illusion_Luna的专栏 8811

关于定位时,getLastKnownLocation返回值为null所碰到的问题

今天百度了yi'xia

u013266076的专栏 9273

获取当前位置的Android编程指南

方法来获取Android设备的当前位置。你可以根据自己的需求进一步处理位置信息,比如显示在地图上或进行其他相关操作。在Android应用程序开发中,经常需要获取设备的当前位置信息。首先,你需要在AndroidManifest.xml文件中添加相关的权限声明,以获取位置信息的权限。方法并不总是返回最新的位置信息,它只返回设备上一次已知的位置。接下来,在你的Activity或Fragment中,你需要获取。方法来注册位置监听器,以便在位置发生变化时接收通知。方法来获取设备的当前位置,并提供相应的源代码示例。

HackCyberX的博客 321

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题...

前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索。该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题。 一. 定位当前位置的原理及实现 定位...

weixin_34126215的博客 1214

getLastKnownLocation返回的值为nullAndroid studio编译报错

ebug调试时发现location为 null,解决办法:在手机 设置 - 定位服务 把定位模式改为 仅使用网络点位; Location location = mlocation.getLastKnownLocation(provider);编译错误,需要捕获SecurityException。

hanmfy的博客 958

Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null

自本篇博客发布以来,收到了很多同行的邮件,大部分都是给我要MapUtils.java文件,或者要关于定位的Demo。以后也省的大家麻烦了,我直接把Demo挂到我的QQ云盘上去,大家可以去那里下载。(注意该Demo无法直接运行,因为我是从项目中抽出来的,但我能保证,该Demo包含了我所有的定位代码,自己调试吧,你懂的)...    QQ云盘地址:http://url.cn/PU7vxq

u011763028的专栏 499

android 开发 - 获取定位信息,解决getLastKnownLocation返回null问题和监听位置变化

1、新建类MyLocation.java,并继承Activity。 2、构造函数(可以根据自身需求增删): public MyLocation(Context _context, MapView _mapView, GraphicsOverlay _locationGOlay){ this.context = _context; this.mMapView = _mapVie...

qq_19688207的博客 4905

getLastKnownLocation()返回null的解决

http://blog.sina.com.cn/s/blog_74c22b210100sfix.html http://cjch.iteye.com/blog/1122382 http://blog.csdn.net/l_serein/article/details/6127300 (以下内容转自网络) 这两天可憋坏我了,一直愁没什么题材可以充实我的博客,正巧最近遇到一个比较棘手的问题...

suzsoft_yz的专栏 541

android 经纬度为空,Android GPS getLastKnownLocation()返回null的解决

AndroidGPSgetLastKnownLocation()返回null的解决(2014-02-20 09:25:50)标签:getlastknownlocationit在使用LocationManager.getLastKnownLocation("gps")获取gps定位的过程中老是报空指针异常在网上百度查了不少资料发现这个问题多出现在2.0以上版本解决方法多是:1.AndroidM...

weixin_31774171的博客 1709
上一篇: Android中Service(二)
下一篇: Android之GPS定位详解
CYoung
博客等级 码龄15年 25粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值