V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WXB506
V2EX  ›  Android

Android 使用 locationManager 获取 location 失败

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

    是这样的,在看第一行代码的时候,照着书上的代码敲,第 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   ·   实用小工具   ·   1007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:48 · PVG 05:48 · LAX 13:48 · JFK 16:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.