Современные смартфоны обладают функцией определения координат, и приложения всё чаще предоставляют информацию о ближайших кафе, пробках или курьерах с заказом на карте. Сегодня на занятии в Android Studio мы создадим программу, которая определит ваше местоположение и отметит его синей точкой на карте. Для этого мы будем использовать язык Kotlin, и структура урока разработана таким образом, чтобы даже новички в среде разработки смогли получить рабочий результат за полчаса.
Что понадобится для работы
Для отображения карт Google предоставляет бесплатный сервис — Google Maps Android API. Чтобы им воспользоваться, нужно получить специальный ключ в Google Cloud Console. Зайдите на сайт cloud.google.com, создайте проект, включите Maps SDK for Android и скопируйте ключ. Он выглядит как длинная строка букв и цифр. Этот ключ мы позже вставим в манифест.
Также потребуются библиотеки: сам Maps SDK и Fused Location Provider — компонент, который быстро и экономно определяет координаты устройства, используя GPS, Wi-Fi и сотовые вышки одновременно.
Подключаем библиотеки и ключ
Откройте build.gradle.kts уровня модуля app и добавьте две зависимости. На момент написания актуальна версия Maps 19.0.0 и Location 21.3.0, но уточните свежие цифры в документации.
dependencies {
implementation("com.google.android.gms:play-services-maps:19.0.0")
implementation("com.google.android.gms:play-services-location:21.3.0")
}
Теперь в файле AndroidManifest.xml внутри тега <application> пропишите ключ. Параллельно добавьте разрешение на доступ к геолокации — без него карта не сможет определить, где вы.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY" />
Размещаем карту на экране
В файле activity_main.xml добавьте элемент <fragment> с классом SupportMapFragment. Он займёт весь экран. Никаких дополнительных контейнеров не нужно — карта сама растянется.
<androidx.fragment.app.FragmentContainerView
android:id="@+id/map_fragment"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Получаем карту в Activity
В MainActivity.kt нужно реализовать интерфейс OnMapReadyCallback и в методе onMapReady получить объект GoogleMap. С ним мы будем взаимодействовать: двигать камеру, ставить маркер, включать слой «мой маркер».
class MainActivity : AppCompatActivity(), OnMapReadyCallback {
private lateinit var map: GoogleMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map_fragment) as SupportMapFragment
mapFragment.getMapAsync(this)
}
override fun onMapReady(googleMap: GoogleMap) {
map = googleMap
// здесь включим определение местоположения
}
}
Включаем кнопку «Моё местоположение»
Google Maps умеет показывать синюю точку без дополнительного кода — достаточно включить слой isMyLocationEnabled. Однако прежде нужно запросить разрешение у пользователя, потому что геолокация — опасное разрешение. Создадим простой метод для проверки и запроса.
private fun enableMyLocation() {
if (ActivityCompat.checkSelfPermission(
this, Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {
map.isMyLocationEnabled = true
} else {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
1
)
}
}
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<String>, grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 1 && grantResults.isNotEmpty()
&& grantResults[0] == PackageManager.PERMISSION_GRANTED
) {
enableMyLocation()
}
}
Вызовите enableMyLocation() в onMapReady. На карте появится кнопка, которая центрирует экран на вашей позиции. При первом запуске система спросит разрешение на доступ к геолокации.
Перемещаем камеру на координаты
Карту можно программно подвинуть в любую точку мира. Для этого создают объект LatLng (широта и долгота) и вызывают moveCamera с CameraUpdateFactory.newLatLngZoom. Например, отправим пользователя на Красную площадь.
val moscow = LatLng(55.7558, 37.6173)
map.moveCamera(CameraUpdateFactory.newLatLngZoom(moscow, 15f))
Параметр 15 — это уровень приближения: 1 показывает весь земной шар, 20 — отдельные дома. Для города оптимально 14–16.
Ставим маркер
Маркер — это флажок на карте. Его можно добавить через addMarker, указав позицию, заголовок и описание. При нажатии на маркер появится информационное окошко.
map.addMarker(
MarkerOptions()
.position(moscow)
.title("Красная площадь")
.snippet("Центр Москвы")
)
Что мы сегодня освоили
Этот урок в среде Android Studio научил вас работать с картами и геолокацией на языке Kotlin. Вы подключили Google Maps, настроили API-ключ, запросили разрешение на доступ к координатам и вывели синюю точку на экран. Теперь вы можете добавить в своё приложение карту, отмечать на ней важные места и даже строить маршруты. Попробуйте заменить координаты Красной площади на своё текущее местоположение — это станет отличным продолжением сегодняшнего занятия.