onLocationChanged在应用程序启动时被多次调用

时间:2017-01-31 11:06:39

标签: android performance android-layout locationlistener android-fusedlocation

我已经编写了以下服务,其目的是在应用程序启动时将用户位置发送到服务器,当用户旅行超过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()));
    }

2 个答案:

答案 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>

作为一般规则,准确定位需要一些时间,因此如果您需要准确性,在您的应用中允许这样做可能是有意义的。