V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
WXB506
V2EX  ›  Android

Android 使用 locationManager 获取 location 失败

  •  
  •   WXB506 · Mar 16, 2016 · 18745 views
    This topic created in 3694 days ago, the information mentioned may be changed or developed.

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

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

    欢迎赐教。

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

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

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

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

    原生的接口在有些机型上得到数据误差非常大,上百公里。
    402159806
        12
    402159806  
       Mar 16, 2016 via Android
    室内 gps 获取不到经纬度 用网络获取吧 还有最好用百度定位 sdk 来定位 否则除非你用的是谷歌地图 不然在百度地图上会有偏移
    yonglanyouyou
        13
    yonglanyouyou  
       Mar 16, 2016
    @402159806 百度肯定支持 WGS84 转火星坐标吧
    chuhemiao
        14
    chuhemiao  
       Mar 16, 2016
    我是来看头像的,就想起来了 windows 必备 clover 软件!!
    shineMicroxy
        15
    shineMicroxy  
       Mar 17, 2016
    上百度 sdk 吧,然后最好把 wifi gps 什么的全打开,然后去室外溜一圈,一般不会出什么问题
    WXB506
        16
    WXB506  
    OP
       Mar 17, 2016
    @shineMicroxy 嗯,昨天试了一下,已经成功了。过两天用百度 sdk 折腾一下~
    Buzzz
        17
    Buzzz  
       Mar 18, 2016
    这个只是获取最近的定位数据,并不是申请定位啊
    之前没有定位的话肯定就返回 null 了,你把百度地图打开,定位后再测试,应该就有数据了
    直接用 google 的定位模块的话,就要加上 requestLocationUpdates 这个方法
    syimo
        18
    syimo  
       Apr 21, 2016
    @WXB506 楼主遇到和你一样的问题了,上面的方法挨个试了,还是不行啊,请问怎么解决的?
    WXB506
        19
    WXB506  
    OP
       Apr 21, 2016
    @syimo 建议在室外试一下,我刚开始实在室内测试的, gps 获取不到位置信息
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5529 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 05:57 · PVG 13:57 · LAX 22:57 · JFK 01:57
    ♥ Do have faith in what you're doing.