【问题标题】:Android Location API not properly tracking the userAndroid Location API 未正确跟踪用户
【发布时间】:2015-02-10 15:58:50
【问题描述】:

我有一个后台服务,它应该跟踪用户的汽车移动,并将数据发送到我的服务器。我有两个用于发送位置的变量,要么是 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 图标。

任何想法为什么不起作用?

【问题讨论】:

  • 我有两个用于发送位置的变量,要么是 60 秒过去了,要么是用户已经移动了 100 米 ...我相信这不是真的 ...阅读后文档我认为没有 either ...它是 and ...因此它的提供者仅每 60 秒检查一次。如果距离超过 100m 会通知您
  • 所以你的意思是,在发送的第一个位置时,它会读取 locationA,并且仅在 60 秒后才会读取 locationB,如果 LocationA 和 LocationB 之间的距离大于 100m,它会触发?
  • 这就是我理解文档的方式......检查getFastestInterval返回的内容...... AFAIK间隔意味着启动GPS(或其他东西取决于 - 优先级和权限)并在间隔处获取位置.. . FastestInterval 意味着如果其他应用程序使用 GPS,你可以给我位置更新,但不经常给我 FastestInterval ......和 ​​SmallestDisplacement 有点不同......通过将其设置为非 0,你告诉提供者:我只关心更改 大约最小排量
  • @Selvin 请将此添加为答案,以便我标记它
  • @Selvin SmallestDisplacement 将您的上一个位置与当前位置进行比较?

标签: android gps location location-provider fusedlocationproviderapi


【解决方案1】:

最后,我只是这样做了:

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

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2020-02-11
    • 2016-01-01
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多