我想知道如何捕捉事件或什么时候我的LocationReqest过期,继承人代码然后我称之为
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setExpirationDuration(500);
mLocationRequest.setNumUpdates(1);
mLocationClient.requestLocationUpdates(mLocationRequest, this);
现在我需要知道我的LocationRequest是中断,请求帮助:)
修改
我以为我可以在
中找到它public void onLocationChanged(Location location) {
//something is here
}
但它不起作用:(
EDIT2
我通过添加处理程序来解决它,在N + 500ms后检查是否设置了位置,我仍然想知道我是否可以在没有处理程序的情况下执行此操作
答案 0 :(得分:16)
你必须自己处理它。在requestLocationUpdates之后立即发布一个Runnable,如下所示:
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setExpirationDuration(500);
mLocationRequest.setNumUpdates(1);
mLocationClient.requestLocationUpdates(mLocationRequest, this);
mHandler.postDelayed(mExpiredRunnable, 500);
这是Runnable:
private final Runnable mExpiredRunnable = new Runnable() {
@Override
public void run() {
showUnableToObtainLocation();
}
};
当无法获得位置修复时,showUnableToObtainLocation方法将具有您想要执行的任何逻辑。
在您实际获得位置修复的正常情况下,您将代码放在onLocationChanged中以取消Runnable:
mHandler.removeCallbacks(mExpiredRunnable);
如果在位置修复或请求到期之前,活动/片段已落后,您还需要在onPause方法中使用相同的代码。