Android地理位置获取的那些坑

来源:互联网 发布:中科院下属企业知乎 编辑:程序博客网 时间:2024/06/07 08:22

我算是搞明白了,无论是Framework还是Application,只要跟硬件相关的东西都有各种坑的存在。
所幸,也正是这些坑的存在,让这个行业形成了一道道门槛。 嗯,是这样的
坑在最后面

Android地理位置获取最佳实践

国外有Google Service的App

如果你遇到的正好是这种App,那你太荣幸了,google service的play-service-location lib正好解决你的问题,并且用起来超级简单,目前11.0.1版本包含你需要的类,10.0.1是不包含的。
使用方法: https://developer.android.com/training/location/retrieve-current.html

墙内的App

百度地图或高德地图的SDK

用过百度地图的都知道,它获取Location的方式非常简单,并且还有现成完善的Demo可以用。百度网络定位据说采用的是IP和基站,我们没那么多时间自己去搞这些玩意。

监听位置的更新

这里推荐一个完整的App https://github.com/obaro/SimpleLocationApp
注意,需要在AndroidManifest.xml里面添加上INTERNET权限

以为获取位置信息就能获取到

通过LocationManager 的方法getLastKnownLocation(String provider),直接获取的就是null

以为更新下位置就能获取到最新的位置

requestLocationUpdates调用后就能从listener获取到位置更新么,
想多了,得等一会。当然,如果你不是在操场办公,是在几十层楼信号娇弱的地方办公,那就等上半格小时到一个小时吧。当然在地铁上更不要指望能获取到位置更新。我还特地打印了位置更新的时间点,证明了我吃顿饭后才能收到位置更新。GPS指望不上,同时手机网络位置更新太慢,Nexus也是这样。

如果室外需要GPS定位怎么办

你只能通过启动Activity启动到设置定位服务开启的界面,是否开启GPS还需要提醒用户到里面设置。如下进入系统定位服务设置。

Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);startActivity(myIntent);