是这样的,在看第一行代码的时候,照着书上的代码敲,第 11.2 节中,使用 locationManager.getLastKnownLocation()方法获取位置时总是返回 null ,权限分配并没有问题,搜素了很多次,尝试了很多方法,依然不能解决问题。
不知道大家有没有遇到过这种问题?又是怎么解决的?
欢迎赐教。
1
em70 2016-03-16 09:16:56 +08:00 via iPhone
测试用的是真机还是模拟器,开 GPS 和 wifi 了吗
|
2
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 |
4
WXB506 OP @yonglanyouyou 那这个问题该怎么解决呢? 我试过调用 requestLocationUpdates(),但是也不行
|
5
yonglanyouyou 2016-03-16 09:59:42 +08:00
@WXB506 不应该。正常获取 Location 信息的方法就是通过 locationManager.requestLocationUpdates 的监听来实现的。
方便的话贴一下你的代码看一下,另外,你是在室内还是室外测试? 我随便撸了个代码,测试是 OK 的 https://gist.github.com/FuHW/1084580a6a9119bc4890#file-gpstest-java |
6
mimzy 2016-03-16 10:00:59 +08:00
2 楼正解
我自己把这书上大部分代码都实现了一遍,因为太懒恰好就记下了这么一个坑 https://github.com/mookrs/AndroidFirstLine - locationManager.getLastKnownLocation() 返回 Null : getLastKnownLocation() 是根据上次已知的位置获取数据,因此要先在 Google Map 里定位一次。 - 室内测试时没 GPS 信号,在 if 判断里调整下顺序,让网络定位优先,权限也要加上。 |
7
feeshne 2016-03-16 10:08:03 +08:00
网上说这种方法 90%都是返回 null ,还说这个方法不是阻塞的,有 debug 或者百度过了吗
|
8
WXB506 OP @yonglanyouyou 我实在室内测试的,我今天回去再试一下,如果还是不行的话,我把代码贴出来请你帮忙分析一下
|
10
yonglanyouyou 2016-03-16 10:40:03 +08:00
@WXB506 室内测试你如果只用 GPS_PROVIDER 的话是铁定没有数据的, GPS 的信号是无法穿透到室内。你打开应用,用手拿着手机伸出窗台,稍过一会儿就可以搜到星了
|
11
pubby 2016-03-16 11:04:22 +08:00 via Android
建议用百度定位 SDK 来做。
原生的接口在有些机型上得到数据误差非常大,上百公里。 |
12
402159806 2016-03-16 12:14:37 +08:00 via Android
室内 gps 获取不到经纬度 用网络获取吧 还有最好用百度定位 sdk 来定位 否则除非你用的是谷歌地图 不然在百度地图上会有偏移
|
13
yonglanyouyou 2016-03-16 13:36:02 +08:00
@402159806 百度肯定支持 WGS84 转火星坐标吧
|
14
chuhemiao 2016-03-16 14:20:52 +08:00
我是来看头像的,就想起来了 windows 必备 clover 软件!!
|
15
shineMicroxy 2016-03-17 10:06:38 +08:00
上百度 sdk 吧,然后最好把 wifi gps 什么的全打开,然后去室外溜一圈,一般不会出什么问题
|
16
WXB506 OP @shineMicroxy 嗯,昨天试了一下,已经成功了。过两天用百度 sdk 折腾一下~
|
17
Buzzz 2016-03-18 12:58:20 +08:00
这个只是获取最近的定位数据,并不是申请定位啊
之前没有定位的话肯定就返回 null 了,你把百度地图打开,定位后再测试,应该就有数据了 直接用 google 的定位模块的话,就要加上 requestLocationUpdates 这个方法 |