Android如何获取当前位置

获取位置想必我们在许多项目中都会遇到这个需求,那么如何以比较好的方式获取呢?

LocationManager是Android API提供 的用来获取设备当前位置的,用他就够了。

第一步,权限,检查Manifest.permission.ACCESS_FINE_LOCATION是否授予;

第二步,locationManager.getAllProviders()获取所有的定位方式,并判断哪一种可用,locationManager.isProviderEnabled(String provider);

第三步,发起定位请求,一般来说,LocationManager.NETWORK_PROVIDER和LocationManager.GPS_PROVIDER常用,前者是基于网络来获取当前位置,后者则需要开启GPS来获取当前位置,更加精确。获取大致位置就用network方式就行。


有两个方法可以用来发起定位请求,locationManager.requestLocationUpdates和locationManager.requestSingleUpdate,前者用于重复不断的发起定位请求,适合实时刷新位置的场景,后者则只发起一次定位请求。

但是,我再使用locationManager.requestSingleUpdate的过程中发现,这个方法可能会没有返回,也就是本次执行失败了,定位没成功。因此,我采用了locationManager.requestLocationUpdates方法来代替,同时,在成功请求到位置的回调中,移除定位请求,这样就能保证百分百获取到定位信息。

第四步,处理定位信息,我发现回调中返回的是一个location对象,点开源码看看


可以看到,location里面包含很多信息,经度,纬度,海拔,时间等,但是没有我们要的位置信息。这时候就需要另一个API Geocoder来处理了。点看源码看看,


看介绍,能把地址转为经纬度等形式,也能把经纬度转为地名地址。用法如下


传入经纬度,得到address集合,address中包含了我们需要的地名信息。

结束,有想法的朋友欢迎留言交流

你可能感兴趣的:(Android如何获取当前位置)