这段时间做国外地理定位,在项目中只需要用到定位,并不需要地图的其他服务,于是先使用了Android原生的位置获取,使用挺方便的,但是到最后死活获取不到postalCode(邮政编码),于是准备搞Google的位置服务试试。
一、先了解一下文档中的注意事项
1、明确说明在8.0以后,后台对获取位置的时间做了限制,一个小时内只能获取几次,所有需要在后台使用服务需要注意。
文档位置
2、Google提供的位置服务有别于Android原生,两者是各自的API
二、添加依赖和需要的权限
1、在app下gradle的dependencies里添加依赖
// 位置服务
implementation "com.google.android.gms:play-services-location:17.0.0"
2、在AndroidManiFest中配置权限,当然动态权限也需要的
<!--粗略位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--精确位置-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
三、创建全局位置服务环境
1、在Activity的onCreate里初始化并添加监听
private FusedLocationProviderClient fusedLocationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
// TODO
}
}
});
}
2、因为是获取上一次定位的信息,所以location在以下几种情况会返回null
- 在定位服务被关闭的时候,因为关闭后会清除上次的定位信息
- 设备从未定位过
- 设备没有安装Google Service或被重启
后续更新监听…