我在我的应用程序中使用Yandex MapKit。目前,我需要获取用户当前位置并在该位置上为相机制作动画。问题是文档真的很差,互联网上的大多数答案似乎在最新版本的地图上都被弃用了。如何获取当前位置和位置更新?
我找到了一个简单的解决方案。地图工具包 3.0.4 似乎已更新其 api 方法。
MapKit mapKit = MapKitFactory.getInstance();
mapKit.createLocationManager().requestSingleUpdate(new LocationListener() {
@Override
public void onLocationUpdated(@NonNull Location location) {
Log.d("TagCheck", "LocationUpdated " + location.getPosition().getLongitude());
Log.d("TagCheck", "LocationUpdated " + location.getPosition().getLatitude());
mapView.getMap().move(
new CameraPosition(location.getPosition(), 14.0f, 0.0f, 0.0f),
new Animation(Animation.Type.SMOOTH, 1),
null);
}
@Override
public void onLocationStatusUpdated(@NonNull LocationStatus locationStatus) {
}
});
此代码将触发设备位置。
不要忘记在设置内容视图或以片段形式返回视图之前包含MapKitFactory.setApiKey(MAPKIT_API_KEY);
和MapKitFactory.initialize(this);
。
首先,您需要获得位置!!的许可
var fusedLocationClient =LocationServices.getFusedLocationProviderClient(this@MapActivity)
fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? ->
Log.d(TAG, "getUserLocation: $location.latitude")
Log.d(TAG, "getUserLocation: $location.longitude")
}
}
上面提供的答案是不正确的,它只允许您找出一次位置。您需要使用其他代码
mapKit = MapKitFactory.getInstance();
mapKit.createLocationManager().subscribeForLocationUpdates(0,0, 0, true, FilteringMode.ON, new LocationListener() {
@Override
public void onLocationUpdated(@NonNull Location location) {
Log.d("TagCheck", "LocationUpdated " + location.getPosition().getLongitude());
Log.d("TagCheck", "LocationUpdated " + location.getPosition().getLatitude());
}
@Override
public void onLocationStatusUpdated(@NonNull LocationStatus locationStatus) {
}
});