Android 使用 locationManager 获取 location 失败

2016-03-16 08:43:46 +08:00
 WXB506

是这样的,在看第一行代码的时候,照着书上的代码敲,第 11.2 节中,使用 locationManager.getLastKnownLocation()方法获取位置时总是返回 null ,权限分配并没有问题,搜素了很多次,尝试了很多方法,依然不能解决问题。

不知道大家有没有遇到过这种问题?又是怎么解决的?

欢迎赐教。

14153 次点击
所在节点    Android
19 条回复
em70
2016-03-16 09:16:56 +08:00
测试用的是真机还是模拟器,开 GPS 和 wifi 了吗
yonglanyouyou
2016-03-16 09:20:21 +08:00
恰好为了 GPS 的航向角数据简单的弄了一下这个东西

GetLastKnownLocation()函数的说明是这样的
“ Returns a Location indicating the data from the last known location fix obtained from the given provider.”
如果你对应的 Provider 中没有最近的定位数据,这边返回的肯定都是 null
WXB506
2016-03-16 09:39:01 +08:00
@em70 测试用的是真机, gps 和 wifi 都是打开的
WXB506
2016-03-16 09:43:32 +08:00
@yonglanyouyou 那这个问题该怎么解决呢? 我试过调用 requestLocationUpdates(),但是也不行
yonglanyouyou
2016-03-16 09:59:42 +08:00
@WXB506 不应该。正常获取 Location 信息的方法就是通过 locationManager.requestLocationUpdates 的监听来实现的。
方便的话贴一下你的代码看一下,另外,你是在室内还是室外测试?

我随便撸了个代码,测试是 OK 的
https://gist.github.com/FuHW/1084580a6a9119bc4890#file-gpstest-java
mimzy
2016-03-16 10:00:59 +08:00
2 楼正解

我自己把这书上大部分代码都实现了一遍,因为太懒恰好就记下了这么一个坑 https://github.com/mookrs/AndroidFirstLine

- locationManager.getLastKnownLocation() 返回 Null : getLastKnownLocation() 是根据上次已知的位置获取数据,因此要先在 Google Map 里定位一次。
- 室内测试时没 GPS 信号,在 if 判断里调整下顺序,让网络定位优先,权限也要加上。
feeshne
2016-03-16 10:08:03 +08:00
网上说这种方法 90%都是返回 null ,还说这个方法不是阻塞的,有 debug 或者百度过了吗
WXB506
2016-03-16 10:09:08 +08:00
@yonglanyouyou 我实在室内测试的,我今天回去再试一下,如果还是不行的话,我把代码贴出来请你帮忙分析一下
WXB506
2016-03-16 10:12:37 +08:00
@feeshne 是的,百度过,和你说的差不多
yonglanyouyou
2016-03-16 10:40:03 +08:00
@WXB506 室内测试你如果只用 GPS_PROVIDER 的话是铁定没有数据的, GPS 的信号是无法穿透到室内。你打开应用,用手拿着手机伸出窗台,稍过一会儿就可以搜到星了
pubby
2016-03-16 11:04:22 +08:00
建议用百度定位 SDK 来做。

原生的接口在有些机型上得到数据误差非常大,上百公里。
402159806
2016-03-16 12:14:37 +08:00
室内 gps 获取不到经纬度 用网络获取吧 还有最好用百度定位 sdk 来定位 否则除非你用的是谷歌地图 不然在百度地图上会有偏移
yonglanyouyou
2016-03-16 13:36:02 +08:00
@402159806 百度肯定支持 WGS84 转火星坐标吧
chuhemiao
2016-03-16 14:20:52 +08:00
我是来看头像的,就想起来了 windows 必备 clover 软件!!
shineMicroxy
2016-03-17 10:06:38 +08:00
上百度 sdk 吧,然后最好把 wifi gps 什么的全打开,然后去室外溜一圈,一般不会出什么问题
WXB506
2016-03-17 10:10:28 +08:00
@shineMicroxy 嗯,昨天试了一下,已经成功了。过两天用百度 sdk 折腾一下~
Buzzz
2016-03-18 12:58:20 +08:00
这个只是获取最近的定位数据,并不是申请定位啊
之前没有定位的话肯定就返回 null 了,你把百度地图打开,定位后再测试,应该就有数据了
直接用 google 的定位模块的话,就要加上 requestLocationUpdates 这个方法
syimo
2016-04-21 22:07:15 +08:00
@WXB506 楼主遇到和你一样的问题了,上面的方法挨个试了,还是不行啊,请问怎么解决的?
WXB506
2016-04-21 22:46:07 +08:00
@syimo 建议在室外试一下,我刚开始实在室内测试的, gps 获取不到位置信息

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/263819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX