Android 位置 API 未正确跟踪用户
Android Location API not properly tracking the user
我有一个后台服务,可以跟踪用户的汽车移动,并将数据发送到我的服务器。我有两个用于发送位置的变量,要么已经过去 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 图标
知道为什么不起作用吗?
最后我就这样做了:
我有 setInterval(5000)
和 setFastestInterval(5000)
然后,对于每个读取位置,如果它们之间的距离大于 100 米,我会将位置发送到我的服务器。我放弃了使用 smallestDisplacement
。这似乎工作可靠。
我有一个后台服务,可以跟踪用户的汽车移动,并将数据发送到我的服务器。我有两个用于发送位置的变量,要么已经过去 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 图标知道为什么不起作用吗?
最后我就这样做了:
我有 setInterval(5000)
和 setFastestInterval(5000)
然后,对于每个读取位置,如果它们之间的距离大于 100 米,我会将位置发送到我的服务器。我放弃了使用 smallestDisplacement
。这似乎工作可靠。