如果希望应用可以持续获取设备位置,可以使用定位服务提供的`[requestLocationUpdates](
)()`接口。该接口根据入参形式的不同,将以两种不同的形式将位置信息返回。一种是通过调用已经定义的`[LocationCallback](
)`类中`[onLocationResult](
)()`回调方法返回一个包含位置信息的`[LocationResult](
)`对象,另一种是将位置信息置于PendingIntent扩展信息中返回。
当应用程序不再需要接收位置更新时,应当停止位置更新,以便于降低功耗。要停止位置更新,可以调用`[removeLocationUpdates](
)()`,传入与`[requestLocationUpdates](
)()`接口相对应的`[LocationCallback](
)`或PendingIntent对象。这里以回调方式作为样例,代码如下。详细的参数说明请参见`[LocationService](
)`接口说明。
1.设置持续定位请求参数。
LocationRequest
mLocationRequest
= new LocationRequest();
// 设置位置更新的间隔(单位为毫秒)
mLocationRequest
.setInterval(10000
);
// 设置定位类型
mLocationRequest
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
2. 定义位置更新回调。
LocationCallback
mLocationCallback
;
mLocationCallback
= new LocationCallback() {
@Override
public void onLocationResult(LocationResult
locationResult
) {
if (
locationResult
!= null) {
// 处理位置回调结果
}
}
};
3. 调用[requestLocationUpdates](
)()进行持续定位。
fusedLocationProviderClient
.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// 接口调用成功的处理
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 接口调用失败的处理
}
});
4. 调用[removeLocationUpdates](
)()停止位置更新。
// 注意:停止位置更新时,mLocationCallback必须与requestLocationUpdates方法中的LocationCallback参数为同一对象。
fusedLocationProviderClient.removeLocationUpdates(mLocationCallback)
// 停止位置更新成功监听回调
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
### 新的开始
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://ali1024.coding.net/public/P7/Android/git)**
**《系列学习视频》**
![](https://s2.51cto.com/images/20210918/1631910946266966.jpg)
**《系列学习文档》**
![](https://s2.51cto.com/images/20210918/1631910946750298.jpg)
**《我的大厂面试之旅》**
![](https://s2.51cto.com/images/20210918/1631910946981456.jpg)
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/162373.html