Android LocationRequest:请求到期时获取回调

时间:2014-03-14 20:08:37

标签: android android-location

我想知道如何捕捉事件或什么时候我的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后检查是否设置了位置,我仍然想知道我是否可以在没有处理程序的情况下执行此操作

1 个答案:

答案 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方法中使用相同的代码。