10

我正在使用 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 秒。但是,它会在一分钟后消失。

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

4

2 回答 2

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 秒后删除您的位置更新。

于 2013-12-31T01:23:45.717 回答
1

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

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

有人会期望此持续时间在调用以下行时开始:

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

但是,文档说明此持续时间从创建请求对象时开始。

于 2015-03-12T10:57:16.197 回答