我已经编写了以下服务,其目的是在应用程序启动时将用户位置发送到服务器,当用户旅行超过500m
时,问题是在启动时它会调用onLocationChanged
3次。
我无法理解它从哪里调用它3次。请指导我如何解决这个问题。
public class LocationUpdateService extends Service implements
LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private static final long BACKGROUND_INTERVAL = 60000;
final private String TAG = LocationUpdateService.class.getSimpleName();
private LocationRequest mLocationRequest;
private GoogleApiClient mGoogleApiClient;
private String LOCATION_PREF = "LOCATION_PREF";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand: ");
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(BACKGROUND_INTERVAL);
mLocationRequest.setFastestInterval(30000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setSmallestDisplacement(500);
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
@Override
public void onLocationChanged(Location location) {
Log.i("Location Service", "onLocationChanged: " + location.toString());
saveLocationandReport(String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude()));
}
答案 0 :(得分:4)
您无法控制JAVA_HOME=C:\Program Files\Java\jdk1.8.0_121
M2_HOME=C:\Program Files (x86)\apache-maven-3.3.9
MAVEN_HOME=C:\Program Files (x86)\apache-maven-3.3.9
MAVEN_OPTS=-Xms256m -Xmx512m
PATH=....;%M2_HOME%\bin;%M2%
,它由位置服务管理。在您的情况下,您可以设置缓冲区/等待时间,如果您在缓冲区时间内有位置更新,则可以检查其与先前位置更新的准确性进行比较,该位置更新最好使用它。
onLocationChanged
答案 1 :(得分:2)
您无法控制何时调用onLocationChanged - 它是调用它的位置服务。
如果出于多种原因,它可能会调用 - 最明显的是当用户实际移动并且它检测到并向您发送更新时,但是当位置服务获得更准确的位置时也可以调用它。 p>
作为一般规则,准确定位需要一些时间,因此如果您需要准确性,在您的应用中允许这样做可能是有意义的。