1

我有一个后台服务,它应该跟踪用户的汽车移动,并将数据发送到我的服务器。我有两个用于发送位置的变量,要么已经过去了 60 秒,要么用户已经移动了 100 米。

在我的服务中,这是我开始收听位置的方式:

mLocationRequest = LocationRequest.create();
mLocationRequest.setSmallestDisplacement(100);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(60 * 1000);

mLocationClient = new LocationClient(context, connectionCallbacks, onConnectionFailedListener);
mLocationClient.connect();

和听众:

ConnectionCallbacks connectionCallbacks = new ConnectionCallbacks() {

    @Override
    public void onConnected(Bundle arg0) {

        mLocationClient.requestLocationUpdates(mLocationRequest, locationListenerAPI);

        //process the last location, if available
        Location loc = mLocationClient.getLastLocation();
        if (loc != null) {
            prepareLocation(loc);
        }
    }

    @Override
    public void onDisconnected() {
    }
};

LocationListener locationListenerAPI= new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        //A location has been read, process it
        prepareLocation(location);
    }

};

因此,当服务正在运行并且我开着车四处行驶时,onLocationChanged 只会触发几次,它没有考虑触发位置读取的时间或米数。我有数据连接,并且在服务运行的整个过程中,通知栏上都可以看到 GPS 图标。

任何想法为什么不工作?

4

1 回答 1

1

最后,我只是这样做了:

我已经setInterval(5000)然后setFastestInterval(5000),对于每个读取位置,如果它们之间的距离大于 100m,我将位置发送到我的服务器。我放弃了使用smallestDisplacement. 这似乎可靠地工作。

于 2015-02-12T13:55:11.567 回答