← Назад к вопросам

Что можно запустить с помощью Intent

1.3 Junior🔥 271 комментариев
#Android компоненты#Жизненный цикл и навигация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что можно запустить с помощью Intent в Android

В Android Intent — это фундаментальный механизм для выполнения операций, выходящих за пределы одного приложения. По сути, это объект-сообщение, который можно использовать для запроса действия от другого компонента приложения или от системы. Возможности Intent огромны и охватывают практически все аспекты взаимодействия с платформой. Их использование делится на два основных типа: явные (Explicit Intents) и неявные (Implicit Intents).

Основные компоненты и действия, запускаемые через Intent

1. Запуск Activity (Активности)

Это наиболее частая задача. Вы можете запускать как свои собственные Activity, так и Activity других приложений или системы.

  • Явный запуск своей Activity:

    val intent = Intent(this, SecondActivity::class.java)
    startActivity(intent)
    
  • Неявный запуск действия (например, открытие веб-страницы, карты, выбор контакта):

    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://developer.android.com"))
    startActivity(intent)
    

2. Запуск и управление Services (Сервисами)

Intent используются для старта и взаимодействия с фоновыми сервисами, особенно с устаревшими Service (не рекомендуются для новых проектов в пользу WorkManager или корутин).

  • Запуск Service:

    val intent = Intent(this, MyBackgroundService::class.java)
    startService(intent) // Для простого запуска (устарел с API 26)
    // Или для Android 8+ с учетом ограничций на фоновые службы
    ContextCompat.startForegroundService(this, intent)
    
  • Связь с BoundService через Intent: Хотя для привязки чаще используется ServiceConnection, сам сервис можно запустить и через Intent.

3. Запуск Broadcast Receivers (Широковещательных приёмников)

Intent — это "сообщения" для системы широковещания.

  • Отправка системного широковещания (например, о низком заряде батареи, изменении режима полёта):
    val intent = Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED)
    intent.putExtra("state", true)
    sendBroadcast(intent)
    
    *Примечание: Для многих системных событий теперь требуются явные разрешения или использование `ContextCompat.sendBroadcast()`.*

  • Отправка локального широковещания внутри приложения (рекомендуемый способ):
    Используется `LocalBroadcastManager` (устарел) или, лучше, **Flow** или **LiveData** из Architecture Components, либо `BroadcastReceiver` с явным указанием пакета.

4. Запуск Activity для результата

Это специальный случай запуска Activity, когда вы ожидаете получить обратно какие-либо данные.

// Запуск
val intent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)
startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT)

// Обработка результата в onActivityResult (или использование Activity Result API)

5. Доставка данных в компоненты (Data Delivery)

Intent — это основной контейнер для передачи данных между компонентами с помощью метода putExtra().

val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("USER_ID", 42)
intent.putExtra("USER_NAME", "John Doe")
intent.putExtra("USER_DATA", parcelableUserObject)
startActivity(intent)

6. Выполнение системных действий и интеграция

Это мощная сторона неявных Intent, которая позволяет интегрировать ваше приложение в экосистему Android:

  • Открытие URL: ACTION_VIEW с URI.
  • Создание email или SMS: ACTION_SENDTO, ACTION_SEND.
  • Съёмка фото или видео: ACTION_IMAGE_CAPTURE.
  • Выбор файлов из галереи или файлового менеджера: ACTION_GET_CONTENT, ACTION_OPEN_DOCUMENT.
  • Отображение местоположения на карте: ACTION_VIEW с geo: URI.
  • Набор номера: ACTION_DIAL.
  • Создание календарного события: ACTION_INSERT.
  • Настройки устройства: ACTION_SETTINGS, ACTION_WIRELESS_SETTINGS.
  • Поиск в вебе или в приложении: ACTION_WEB_SEARCH, ACTION_SEARCH.
  • Общий доступ к контенту (Sharing): ACTION_SEND — краеугольный камень социальных функций.
// Пример: Поделиться текстом
val shareIntent = Intent(Intent.ACTION_SEND).apply {
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, "Посмотрите это крутое приложение!")
}
startActivity(Intent.createChooser(shareIntent, "Поделиться через"))

7. Запуск PendingIntent

PendingIntent — это особый вид Intent, который вы можете передать другому приложению, чтобы оно выполнило его от вашего имени с вашими разрешениями. Это ключевой инструмент для:

  • Уведомлений (Notifications): По клику на уведомление.
  • Виджетов домашнего экрана (App Widgets): По клику на кнопку виджета.
  • Алармов (AlarmManager): Запуск действия в заданное время.
  • Широковещаний по таймеру.
val intent = Intent(this, MainActivity::class.java)
val pendingIntent = PendingIntent.getActivity(
    this, 0, intent,
    PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
// Использование pendingIntent в уведомлении

Важные технические аспекты

  • Фильтры Intent (Intent Filters): Чтобы ваш компонент (например, Activity) мог реагировать на неявные Intent, вы объявляете <intent-filter> в AndroidManifest.xml. Это определяет, какие действия, типы данных (MIME) и схемы URI он может обрабатывать.
  • Разрешения (Permissions): При запуске компонентов других приложений могут требоваться разрешения, объявленные тегом <uses-permission>.
  • Безопасность: Явные Intent безопасны, так как указывают конкретный класс. Неявные Intent проверяются системой, и пользователь видит диалог выбора приложения (Resolve Activity). PendingIntent требует особой внимательности из-за делегирования прав.

Итог: С помощью Intent вы можете запускать и взаимодействовать практически с любым компонентом Android-системы: активити, сервисы, приёмники. Они обеспечивают глубокую интеграцию между приложениями, реализуя паттерн "не изобретай велосипед" — если есть приложение, которое умеет показывать карты или отправлять почту, вашему приложению не нужно реализовывать эту функциональность с нуля. Понимание и грамотное использование Intent — один из ключевых навыков Android-разработчика.

Что можно запустить с помощью Intent | PrepBro