Android,位置请求,设置到期时间不起作用

时间:2013-06-04 03:02:51

标签: android gps android-location

我正在使用在I / O 2013中引入的新位置API。

它工作正常,我的结果没有问题。我的问题是当我将setExpirationDuration(WHATEVER_MILLIS)设置为毫无疑问时,它会工作一分钟。

这是我的代码:

LocationRequest locationRequest = LocationRequest.create()
                            .setInterval(10 * 60 * 1000) // every 10 minutes
                            .setExpirationDuration(10 * 1000) // After 10 seconds
                            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

当我运行应用程序时,卫星指示器将显示在托盘中,所以我希望它只需10秒钟。但是,它会在一分钟后消失。

任何建议或意见将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

由于它似乎是Android中的一个真正问题,因此解决方法可能是手动删除位置更新的处理程序。

    listHandler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 0) {
                mLocationClient.removeLocationUpdates(MyActivity.this);
                //Location Updates are now removed
            }
            super.handleMessage(msg);
        }
    };

在您请求更新位置(最长10秒)后,您可以拨打此处理程序,当然会延迟10秒。

myLocationClient.requestLocationUpdates(...);
listHandler.sendEmptyMessageDelayed(0, 10000);

这可以确保在10秒后您的位置更新被移除。

答案 1 :(得分:1)

在文档(https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html#setExpirationDuration(long)

它说: “持续时间立即开始(而不是在请求传递给位置客户端时),因此如果请求稍后重新使用,请再次调用此方法。”

在调用以下行时,可以预期此持续时间开始:

LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, request, this);

但是,文档说明这个持续时间是在创建请求对象时开始的。