Запросите доступ к местоположению на основе сессии с помощью кнопки «Местоположение».

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

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

Демонстрация работы кнопки «Местоположение» в приложении.
Рисунок 1. Демонстрация пользовательского сценария нажатия кнопки «Местоположение».

Когда использовать кнопку определения местоположения

Используйте кнопку определения местоположения для функций, требующих кратковременного, сессионного доступа к точному местоположению. Это идеально подходит для приложений, которым не требуется постоянный доступ к местоположению и которые стремятся уменьшить количество повторяющихся запросов на разрешение типа «Только в этот раз».

К типичным сценариям использования относятся:

  • Функции функции «Поиск рядом со мной»: поиск ближайших отелей, магазинов или ресторанов.
  • Совместное использование местоположения: Вы можете один раз поделиться своим текущим местоположением с друзьями или членами семьи.
  • Социальные сети: отметки о местоположении или геотеги.
  • Электронная коммерция: автоматическое заполнение адреса для доставки.

Настройка пользовательского интерфейса

Чтобы кнопка соответствовала эстетике вашего приложения и при этом оставалась узнаваемой, вы можете изменить следующие визуальные элементы:

  • Цветовая схема фона и значков.
  • Опишите стиль, размер и форму.
  • Текстовые метки из предопределенного списка (например, «Использовать точное местоположение», «Поделиться точным местоположением»).
Демонстрация параметров настройки кнопки «Местоположение»
Рисунок 2. Примеры вариантов настройки кнопки местоположения.

Реализуйте кнопку определения местоположения.

Для интеграции кнопки определения местоположения используйте библиотеку 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 или более ранних версий.