Yandex Map SDK Язык программирования Котлин, как получить текущие координаты приложения и постоянно их отслеживать
kotlin
dependencies {
implementation 'com.yandex.android:maps:4.0.0'
}
2. Создать активность или фрагмент, в котором будет отображаться карта и отслеживаться текущие координаты приложения:
kotlin
class MapActivity : AppCompatActivity(), LocationListener {
private lateinit var mapView: MapView
private lateinit var map: YandexMap
private lateinit var locationManager: LocationManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
// Инициализация карты
mapView = findViewById(R.id.map_view)
mapView.map.addInputListener(inputListener)
mapView.map.move(
CameraPosition(TARGET_LOCATION, DEFAULT_ZOOM_LEVEL, 0.0f, 0.0f),
Animation(Animation.Type.SMOOTH, 0.toFloat())
)
// Инициализация LocationManager для получения координат
locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
}
override fun onResume() {
super.onResume()
// Запрос разрешения на доступ к местоположению пользователя
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
PERMISSION_REQUEST_CODE
)
} else {
startLocationUpdates()
}
}
override fun onPause() {
super.onPause()
stopLocationUpdates()
}
// Начать получение обновлений местоположения
private fun startLocationUpdates() {
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_INTERVAL,
MIN_DISTANCE_INTERVAL,
this
)
}
if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_INTERVAL,
MIN_DISTANCE_INTERVAL,
this
)
}
}
// Прекратить получение обновлений местоположения
private fun stopLocationUpdates() {
locationManager.removeUpdates(this)
}
override fun onLocationChanged(location: Location) {
// Обработка обновления местоположения
val latitude = location.latitude
val longitude = location.longitude
// Пример использования координат
Toast.makeText(this, "Latitude: $latitude, Longitude: $longitude", Toast.LENGTH_SHORT).show()
// Перемещение камеры на текущие координаты
map.move(
CameraPosition(Point(latitude, longitude), DEFAULT_ZOOM_LEVEL, 0.0f, 0.0f),
Animation(Animation.Type.SMOOTH, 0.toFloat())
)
}
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
override fun onProviderEnabled(provider: String?) {}
override fun onProviderDisabled(provider: String?) {}
companion object {
private val TARGET_LOCATION = Point(55.751244, 37.618423) // Начальные координаты для центрирования карты
private const val DEFAULT_ZOOM_LEVEL = 15.0f // Уровень приближения карты
private const val MIN_TIME_INTERVAL = 1000L // Минимальное время между обновлениями местоположения
private const val MIN_DISTANCE_INTERVAL = 10f // Минимальное расстояние между обновлениями местоположения
private const val PERMISSION_REQUEST_CODE = 123 // Код запроса разрешения на доступ к местоположению пользователя
}
}
3. В манифесте приложения добавить разрешение на доступ к местоположению:
xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
4. В файле макета активности `activity_map.xml` добавить виджет `MapView`:
xml
<com.yandex.mapkit.mapview.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
После выполнения этих шагов приложение будет отслеживать текущие координаты в реальном времени и перемещать карту в соответствии с изменением координат. При обновлении местоположения, координаты можно использовать для любых нужд приложения, например, для отображения пользователя на карте или определения ближайших объектов. В коде приведен пример использования полученных координат в виде вывода всплывающего сообщения.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет