使用locationClient删除位置更新

时间:2018-04-04 11:00:52

标签: android google-maps location

我的Android应用中有一个谷歌地图活动,我无休止地接收位置更新。我想删除位置更新,但我真的不知道该怎么做,我在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();

                }
            });

地图中的内容&#34;我的位置&#34;按钮,它给我不断的位置更新,这阻止我移动地图,因为如果我尝试,它会自动移回我的位置。

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

希望你能帮我配偶,我现在已经搜索了几个小时。

非常感谢你!

1 个答案:

答案 0 :(得分:1)

我想知道如果您的屏幕中已经有GoogleMap,为什么要使用FusedClient获取位置?因为您可以直接从GoogleMap实例获取当前位置

假设您有一个GoogleMap - &gt;的实例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;
  }
}