目录
一、定位功能准备
1.申请权限
2.开启定位所需功能
(1)定位
(2)WiFi
(3)移动数据连接(基站)
二、获取定位信息
1.定位条件器 Criteria
2.定位管理器 LocationManager
3.定位监听器 LocationListener
三、解析定位信息 Location
四、案例代码一览
Android的手机定位一般由卫星定位、WiFi定位、基站定位实现。卫星定位由几个全球卫星导航系统提供,主要包括美国GPS、俄罗斯格洛纳斯、中国北斗。WiFi定位一般通过接入公共WiFi,通过WiFi的MAC地址与电信网络宽带的网络IP,查询WiFi位置获取接入该WiFi的大致位置。基站定位是监测手机SIM卡能搜索到周围的哪些基站,手机必然处于它们信号的重叠位置。该功能由定位管理器LocationManager控制。
定位需要手机开启对应的功能;定位、无线网络(WiFi)、数据连接。
定位操作需要获取权限;部分权限涉及用户隐私,需要动态申请。
(1)定位
使用LocationManager(定位管理器)获取定位功能状态。
(2)WiFi
使用WiFiManager(WiFi管理器)获取WiFi状态及设置WiFi状态。
(3)移动数据连接(基站)
使用ConnectivityManager(连接管理器)获取移动数据连接状态及设置连接状态;请注意因为是隐藏方法,需要通过反射调用。
开启定位相关功能只是将定位的前提条件准备好,若想获得手机当前所处的位置信息,还要依靠一系列定位工具。与定位信息获取有关的工具有定位条件器Criteria、定位管理器LocationManager、定位监听器LocationListener。
简单来说就是,通过设置好条件的定位条件器(Criteria)获取到最佳的定位信息提供者(String型数据),再向定位管理器添加定位监听器(LocationListener)及定位信息提供者。
下面对这3个工具分别进行介绍。
定位条件器用于设置定位的前提条件,比如精度、速度、海拔、方位等信息。
有以下6个常用方法:
setAccuracy:设置定位精确度。有两个取值:
- Criteria.ACCURACY_FINE 表示精度高。
- Criteria.ACCURACY_COARSE表示精度低。
setSpeedAccuracy:设置速度精确度。速度精确度的取值如下:
- ACCURACY_HIGH 精度高,误差小于100米
- ACCURACY_MEDIUM 精度中等,误差在100米到500米之间
- ACCURACY_LOW 精度低,误差大于500米
setAltitudeRequired:设置是否需要海拔信息。取值true表示需要,false表示不需要。
setBearingRequired:设置是否需要方位信息。取值true表示需要,false表示不需要。
setCostAllowed:设置是否允许运营商收费。取值true表示允许,false表示不允许。
setPowerRequirement:设置对电源的需求。有3个取值:
- Criteria.POWER_LOW 耗电低
- Criteria.POWER_MEDIUM 耗电中等
- Criteria.POWER_HIGH 耗电高
定位管理器用于获取定位信息的提供者、设置监听器,并获取最近一次的位置信息。定位管理器的对象从系统服务LOCATION_SERVICE获取。常用方法有以下7个:
getBestProvider:获取最佳的定位提供者(String型数据)。第一个参数为定位条件器Criteria的实例,第二个参数取值true表示只要可用的;在第二参数取true时,无有效定位提供者将返回null。建议第二参数参数false与监听器的onProviderDisabled和onProviderEnabled方法配合使用。定位提供者的取值(名称)说明如下:
- gps 卫星定位,开启GPS功能
- network 网络定位,开启数据连接或WLAN功能
- passive 无法定位,未开启定位相关功能
- fused 自动选择最佳定位方法
isProviderEnabled:判断指定的定位提供者是否可用。
getLastKnownLocation:获取最近一次的定位地点,返回值为Location对象,如无有效定位信息将返回null。
requestLocationUpdates:设置定位监听器。其中,第一个参数为定位提供者(String型),第二个参数为位置更新的最小间隔时间,第三个参数为位置更新的最小距离,第四个参数为定位监听器实例。
removeUpdates:移除定位监听器。
addGpsStatusListener:添加定位状态的监听器。该监听器需实现GpsStatus.Listener 接口的onGpsStatusChanged方法。
removeGpsStatusListener:移除定位状态的监听器。
定位监听器用于监听定位信息的变化事件,如定位提供者的开关、位置信息发生变化等。该监听器可使用以下4种方法。
onLocationChanged:在位置地点发生变化时调用。在此可获取最新的位置信息。
onProviderDisabled:在定位提供者被用户关闭时调用。
onProviderEnabled:在定位提供者被用户开启时调用。
onStatusChanged:在定位提供者的状态变化时调用。定位提供者的状态取值如下:
- OUT_OF_SERVICE 在服务范围外
- TEMPORARILY_UNAVAILABLE 暂时不可用
- AVAILABLE 可用状态
通过LoactionManager对象使用getLastKnownLocation方法以及定位变化监听器可获取到Location型数据。
Location对象可使用以下方法解析数据:
- : 返回位置的纬度。
- : 返回位置的经度。
- : 返回位置的海拔高度,如果没有海拔信息,则返回 0。
- : 返回位置的精确度。
- : 返回提供位置信息的服务的名称。
- : 返回位置信息的时间戳。
- : 检查位置是否包含海拔信息。
- : 检查位置是否包含速度信息。
- : 检查位置是否包含方向信息。
- : 检查位置是否包含精确度信息。
- : 计算当前位置到目标位置之间的距离。
- : 计算当前位置到目标位置的方向。
- : 设置位置的纬度。
- : 设置位置的经度。
- : 设置位置的海拔高度。