使用 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;
}
}
我的 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;
}
}