Кнопка определения местоположения в Android — это настраиваемый элемент системного пользовательского интерфейса, предназначенный для упрощения запроса точного доступа к местоположению в рамках сессии. Инициируя запросы местоположения посредством прямого действия пользователя, кнопка повышает конфиденциальность пользователя и уменьшает неудобства, связанные с повторяющимися диалогами разрешений, обычно встречающимися при временном предоставлении доступа «только на этот раз».
Если ваше приложение ориентировано на Android 17 (уровень API 37) или более позднюю версию и содержит только функции, требующие доступа к местоположению на основе сессии, политика Google Play требует использования кнопки определения местоположения. Для получения более подробной информации см. политику использования кнопки определения местоположения .

Когда использовать кнопку определения местоположения
Используйте кнопку определения местоположения для функций, требующих кратковременного, сессионного доступа к точному местоположению. Это идеально подходит для приложений, которым не требуется постоянный доступ к местоположению и которые стремятся уменьшить количество повторяющихся запросов на разрешение типа «Только в этот раз».
К типичным сценариям использования относятся:
- Функции функции «Поиск рядом со мной»: поиск ближайших отелей, магазинов или ресторанов.
- Совместное использование местоположения: Вы можете один раз поделиться своим текущим местоположением с друзьями или членами семьи.
- Социальные сети: отметки о местоположении или геотеги.
- Электронная коммерция: автоматическое заполнение адреса для доставки.
Настройка пользовательского интерфейса
Чтобы кнопка соответствовала эстетике вашего приложения и при этом оставалась узнаваемой, вы можете изменить следующие визуальные элементы:
- Цветовая схема фона и значков.
- Опишите стиль, размер и форму.
- Текстовые метки из предопределенного списка (например, «Использовать точное местоположение», «Поделиться точным местоположением»).

Реализуйте кнопку определения местоположения.
Для интеграции кнопки определения местоположения используйте библиотеку Jetpack . Эта библиотека упрощает настройку, обеспечивает безопасное отображение на более новых платформах и предоставляет резервный вариант для приложений, ориентированных на Android 16 и ниже.
Шаг 1: Укажите разрешения в файле Android Manifest.
Необходимо указать стандартные разрешения на доступ к местоположению, а также специальное разрешение USE_LOCATION_BUTTON требуемое службой удаленного рендеринга системы.
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright 2026 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 1. Standard Coarse and Fine Location Permissions --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Optional: If your app is only using the location button to access location, you should add the "onlyForLocationButton" flag shown below to your ACCESS_FINE_LOCATION declaration. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:usesPermissionFlags="onlyForLocationButton"/> Note: Adding this flag restricts your app from accessing the precise location permission via the broader permission, and that users will be required to use the location button in order to share precise location with the app. This is designed to improve user privacy & trust when granting location access. --> <!-- 2. CRITICAL: Required system permission for rendering the LocationButton --> <uses-permission android:name="android.permission.USE_LOCATION_BUTTON" /> <application android:icon="@mipmap/ic_launcher" android:label="LocationButtonSample" android:theme="@style/Theme.PinPoint"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Шаг 2: Реализация Kotlin composable
Ниже приведён пример реализации кнопки определения местоположения, включая примеры использования доступных параметров настройки, которые можно использовать для приведения пользовательского интерфейса в соответствие с остальной частью приложения.
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.core.locationbutton.compose.LocationButton import androidx.core.locationbutton.compose.LocationButtonTextType @Composable fun LocationPermissionScreen(onPermissionGranted: () -> Unit, onPermissionDenied: () -> Unit) { // Renders the secure system-trusted Location Button composable LocationButton( // Callback triggered when the user taps the secure button and makes a decision on the permission dialog onPermissionResult = { isGranted -> if (isGranted) { onPermissionGranted() } else { onPermissionDenied() } }, /* ============================================================================ * VISUAL CUSTOMIZATIONS * Un-comment any of the parameters below to customize the button's aesthetics. * If omitted, the button falls back to secure, high-contrast system defaults. * ============================================================================ */ /* // LABEL TEXT TYPE: // Predefined system strings rendered inside the secure process. // Options: PreciseLocation, UsePreciseLocation, SharePreciseLocation, // NearMyPreciseLocation, or None (for an icon-only button). textType = LocationButtonTextType.UsePreciseLocation, // COLOR PALETTE: // Customize the container background, text label, and icon tint colors. backgroundColor = Color(0xFF00796B), // e.g., Material Teal textColor = Color.White, iconTint = Color(0xFFFFC107), // e.g., Amber icon tint // CORNER RADIUS & SHAPE: // Define the resting corner radius and the morphed radius when pressed. cornerRadius = 24.dp, // Rounded capsule shape pressedCornerRadius = 12.dp, // Morphs to sharper corners on tap // OUTLINE STROKE (BORDERS): // Add a contrasting outline stroke around the button bounds. strokeColor = Color(0xFF004D40), strokeWidth = 2.dp, // INTERACTIVE TOUCH PADDING: // Defines the secure clickable touch target boundary. // Coerced securely by the system between 4.dp and 8.dp. clickablePadding = PaddingValues(6.dp) */ ) }
Шаг 3: Обеспечение обратной совместимости
Библиотека Jetpack автоматически обеспечивает обратную совместимость с более старыми версиями Android. На устройствах под управлением Android 16 или ниже библиотека использует локально отрисованный компонент, который сохраняет настроенную визуальную структуру, но при этом возвращается к стандартному запросу разрешения на определение местоположения.
Используя этот подход, вы можете воспользоваться преимуществами кнопки определения местоположения, не разрабатывая параллельное решение для устройств под управлением Android 16 или более ранних версий.