Android 使用 locationManager 获取 location 失败 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WXB506
V2EX    Android

Android 使用 locationManager 获取 location 失败

  •  
  •   WXB506 2016-03-16 08:43:46 +08:00 17599 次点击
    这是一个创建于 3505 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    欢迎赐教。

    19 条回复    2016-04-21 22:46:07 +08:00
    em70
        1
    em70  
       2016-03-16 09:16:56 +08:00 via iPhone
    测试用的是真机还是模拟器,开 GPS 和 wifi 了吗
    yonglanyouyou
        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
    WXB506
        3
    WXB506  
    OP
       2016-03-16 09:39:01 +08:00
    @em70 测试用的是真机, gps 和 wifi 都是打开的
    WXB506
        4
    WXB506  
    OP
       2016-03-16 09:43:32 +08:00
    @yonglanyouyou 那这个问题该怎么解决呢? 我试过调用 requestLocationUpdates(),但是也不行
    yonglanyouyou
        5
    yonglanyouyou  
       2016-03-16 09:59:42 +08:00
    @WXB506 不应该。正常获取 Location 信息的方法就是通过 locationManager.requestLocationUpdates 的监听来实现的。
    方便的话贴一下你的代码看一下,另外,你是在室内还是室外测试?

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

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

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

    原生的接口在有些机型上得到数据误差非常大,上百公里。
    402159806
        12
    402159806  
       2016-03-16 12:14:37 +08:00 via Android
    室内 gps 获取不到经纬度 用网络获取吧 还有最好用百度定位 sdk 来定位 否则除非你用的是谷歌地图 不然在百度地图上会有偏移
    yonglanyouyou
        13
    yonglanyouyou  
       2016-03-16 13:36:02 +08:00
    @402159806 百度肯定支持 WGS84 转火星坐标吧
    chuhemiao
        14
    chuhemiao  
       2016-03-16 14:20:52 +08:00
    我是来看头像的,就想起来了 windows 必备 clover 软件!!
    shineMicroxy
        15
    shineMicroxy  
       2016-03-17 10:06:38 +08:00
    上百度 sdk 吧,然后最好把 wifi gps 什么的全打开,然后去室外溜一圈,一般不会出什么问题
    WXB506
        16
    WXB506  
    OP
       2016-03-17 10:10:28 +08:00
    @shineMicroxy 嗯,昨天试了一下,已经成功了。过两天用百度 sdk 折腾一下~
    Buzzz
        17
    Buzzz  
       2016-03-18 12:58:20 +08:00
    这个只是获取最近的定位数据,并不是申请定位啊
    之前没有定位的话肯定就返回 null 了,你把百度地图打开,定位后再测试,应该就有数据了
    直接用 google 的定位模块的话,就要加上 requestLocationUpdates 这个方法
    syimo
        18
    syimo  
       2016-04-21 22:07:15 +08:00
    @WXB506 楼主遇到和你一样的问题了,上面的方法挨个试了,还是不行啊,请问怎么解决的?
    WXB506
        19
    WXB506  
    OP
       2016-04-21 22:46:07 +08:00
    @syimo 建议在室外试一下,我刚开始实在室内测试的, gps 获取不到位置信息
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3318 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:40 PVG 19:40 LAX 04:40 JFK 07:40
    Do have faith in what you're doing.
    div class="sep10">
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86