我的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对象,我也不知道如何做到这一点。
希望你能帮我配偶,我现在已经搜索了几个小时。
非常感谢你!
答案 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;
}
}