使用FusedLocationProviderClient时onLocationChanged

时间:2019-07-15 03:03:58

标签: java android google-maps

documentation中已明确指出LocationListener“用于在位置更改时从FusedLocationProviderApi接收通知”。另一方面,FusedLocationProviderApi已被标记为已弃用,因此他们建议使用FusedLocationProviderClient。然后,如何在使用FusedLocationProviderClient时检测位置何时已更改?。

我需要这样做,因为如果我仅使用requestLocationUpdate callback,它将不管位置值是否更改而更新值。 我只需要更改位置值。这样,如果我将位置值更新到数据库,就不会浪费。简而言之,仅通过更改位置来更新位置值。而不是根据时间跨度更新位置值。

代码:

private void createLocationCallback() {
    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            super.onLocationResult(locationResult);
            //every 5 seconds
            mLastLocation = locationResult.getLastLocation();
            mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
            updateUI();//need onLocationChanged

        }
    };
}

private void startLocationUpdates(){
    Log.e(TAG, "startLocationUpdate");
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_FINE_LOCATION);
        }
        return;
    }
    mFusedLocationClient.requestLocationUpdates(mLocationRequest,mLocationCallback, Looper.myLooper());
}

1 个答案:

答案 0 :(得分:1)

您可以在LocationRequest中使用setSmallestDisplacement
例子

locationRequest.setSmallestDisplacement(10) // 10 meters. location callback only fired when location change more than 10 metter

另一件事是位置精度不能100%,因此有时您放置不移动手机,但位置仍会更改。