使用 locationClient 删除位置更新

remove location updates with a locationClient

我的 Android 应用程序中有一个 Google 地图 activity,并且 我不断收到位置更新。我想删除位置更新,但我真的不知道该怎么做,我在 Google 上搜索过,但没有找到任何有用的信息,可能是因为我以一种(?)奇怪的方式做到了.我会用我的应用程序代码来解释我自己:

我有一个 FusedLocationProviderClient locationClient 声明:

private FusedLocationProviderClient locationClient;

我稍后实例化:

locationClient = getFusedLocationProviderClient(this);

然后,我像这样请求最后一个位置:

locationClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    if(location != null){
                        userPosition = location;
                        locationClient.removeLocationUpdates();
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    e.printStackTrace();

                }
            });

这是在地图 "my location" 按钮中,它为我提供持续的位置更新,这会阻止我移动地图,因为如果我尝试移动地图,它会自动移回我的位置。

我应该如何停止这些位置更新?我知道 removeLocationUpdates 方法,但我没有 GoogleApiClient 对象或 locationCallback 对象,我不知道该怎么做。

希望你们能帮助我,我已经搜索了几个小时了。

非常感谢!

我想知道如果屏幕上已经显示 GoogleMap,为什么还要使用 FusedClient 获取位置信息。因为您可以直接从 GoogleMap 实例获取您当前的位置;

假设您有一个 GoogleMap -> mMap 的实例。要获取更新,您只需注册回调:

Location mLocation = mMap.getMyLocation(); // mLocation is your current location

但是这个方法是deperecated.

这是如何做得更好(摘自official guide):-

public class MyLocationDemoActivity extends FragmentActivity
    implements OnMyLocationButtonClickListener,
        OnMyLocationClickListener,
        OnMapReadyCallback {

  private GoogleMap mMap;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_location_demo);

    SupportMapFragment mapFragment =
        (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
  }

  @Override
  public void onMapReady(GoogleMap map) {
    mMap = map;
    // TODO: Before enabling the My Location layer, you must request
    // location permission from the user. This sample does not include
    // a request for location permission.
    mMap.setMyLocationEnabled(true);
    mMap.setOnMyLocationButtonClickListener(this);
    mMap.setOnMyLocationClickListener(this);
  }

  @Override
  public void onMyLocationClick(@NonNull Location location) {
    Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
  }

  @Override
  public boolean onMyLocationButtonClick() {
    Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT).show();
    // Return false so that we don't consume the event and the default behavior still occurs
    // (the camera animates to the user's current position).
    return false;
  }
}