Намерения и навигация
Перемещайтесь между Activity с помощью явных Intents, передавайте данные через putExtra/getExtra и запускайте внешние приложения с помощью неявных Intents.
«Намерения и навигация» — бесплатный урок Android Academy на CoddyKit. Это урок 5 из 7. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 7 уроков всего.
Что такое Intent?
Intent — это сообщение, которое указывает Android выполнить действие:
- Явный Intent — запускает конкретную Activity в вашем приложении
- Неявный Intent — просит Android найти приложение, способное выполнить действие (открыть URL, позвонить по номеру, поделиться текстом)
Intent — основной способ взаимодействия Activity друг с другом.
Явный Intent: открытие экрана
Запуск другой Activity в вашем приложении:
// In your button click listener:
binding.btnGoToDetail.setOnClickListener {
val intent = Intent(this, DetailActivity::class.java)
startActivity(intent)
}
// To also close the current screen after navigating:
binding.btnLogin.setOnClickListener {
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
finish() // removes LoginActivity from back stack
}Передача данных с помощью extras
Используйте extras, чтобы передать данные в следующую Activity:
intent.putExtra("key", value)— добавляет данныеintent.getStringExtra("key")— получает Stringintent.getIntExtra("key", defaultValue)— получает Int
Используйте константы для ключей, чтобы избежать опечаток.
Передача и получение extras
Отправка данных из одной Activity и их чтение в следующей:
// Sending Activity:
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("PRODUCT_ID", 42)
intent.putExtra("PRODUCT_NAME", "Laptop")
startActivity(intent)
// DetailActivity — receiving:
class DetailActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail)
val id = intent.getIntExtra("PRODUCT_ID", -1)
val name = intent.getStringExtra("PRODUCT_NAME") ?: ""
// Use id and name to load data
}
}Неявные Intent
Неявные Intent позволяют приложению использовать функции других установленных приложений, не зная, какое именно приложение их обрабатывает:
- Открыть веб-URL в браузере
- Набрать номер телефона
- Отправить электронное письмо
- Поделиться текстом с любым приложением
Если Intent могут обработать несколько приложений, Android показывает средство выбора приложения.
Распространённые неявные Intent
Запуск системных действий с помощью неявных Intent:
import android.content.Intent
import android.net.Uri
// Open a web page
val webIntent = Intent(Intent.ACTION_VIEW,
Uri.parse("https://developer.android.com"))
startActivity(webIntent)
// Dial a phone number
val dialIntent = Intent(Intent.ACTION_DIAL,
Uri.parse("tel:+15551234567"))
startActivity(dialIntent)
// Share text
val shareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "Check out this app!")
}
startActivity(Intent.createChooser(shareIntent, "Share via"))Получение результатов
Если нужно получить результат с другого экрана (например, выбрать изображение или отправить форму), используйте Activity Result API:
- Зарегистрируйте средство запуска с помощью
registerForActivityResult - Запустите его при необходимости
- Обработайте результат в обратном вызове
Этот подход заменяет старый шаблон с startActivityForResult / onActivityResult.
Пример Result API
Запрос фотографии из галереи и получение результата:
import androidx.activity.result.contract.ActivityResultContracts
class MainActivity : AppCompatActivity() {
private val pickImage = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri ->
// 'uri' is the selected image URI, or null if cancelled
if (uri != null) {
binding.ivPhoto.setImageURI(uri)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
binding.btnPickPhoto.setOnClickListener {
pickImage.launch("image/*")
}
}
}Глубокие ссылки
Глубокая ссылка — это URL, который напрямую открывает определённый экран вашего приложения. Такие ссылки полезны для push-уведомлений и маркетинговых ссылок.
Объявляйте глубокие ссылки в AndroidManifest.xml с помощью intent-filter и тега data, указывающего схему и хост URL.
Быстрая проверка
Какой тип Intent следует использовать, чтобы открыть веб-сайт в браузере пользователя?
Повторение: Intent и навигация
Теперь вы умеете переходить между экранами и запускать системные функции:
- Явный Intent — запускает конкретную Activity в вашем приложении
putExtra/getExtra— передают данные между Activity- Неявный Intent — открывает URL, набирает номера и отправляет содержимое
- Activity Result API — получает данные из другой Activity
Далее: отображение динамических списков с помощью RecyclerView.
Часто задаваемые вопросы
Урок «Намерения и навигация» бесплатный?
Да — полный текст урока «Намерения и навигация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 7 уроков всего.
Чему я научусь в уроке «Намерения и навигация»?
Перемещайтесь между Activity с помощью явных Intents, передавайте данные через putExtra/getExtra и запускайте внешние приложения с помощью неявных Intents. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 5 из 7.
Сколько времени занимает урок «Намерения и навигация»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структура проекта и манифест
- Активности и жизненный цикл
- Макеты и представления
- Обработка ввода пользователя
- Намерения и навигация
- Фрагменты
- Разрешения и запросы во время выполнения