Sobes.tech
Middle

რა არის PendingIntent?

sobes.tech AI

პასუხი AI-სგან

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

Он используется для:

  • уведомлений (запуск активности при нажатии на уведомление)
  • виджетов рабочего стола (обработка нажатий пользователя)
  • служб планировщика (повторяющиеся задачи с AlarmManager)

Основные отличия от обычного Intent:

  • PendingIntent передается другому приложению
  • PendingIntent сохраняет разрешения исходного приложения

Типы PendingIntent:

  • getActivity(): для запуска Activity
    // Создание PendingIntent для запуска Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): для запуска Service
    // Создание PendingIntent для запуска Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): для отправки широковещательного сообщения
    // Создание PendingIntent для отправки Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Флаги PendingIntent влияют на поведение:

Флаг Описание
FLAG_ONE_SHOT PendingIntent можно использовать только один раз.
FLAG_NO_CREATE Если PendingIntent не существует, не создавать его, вернуть null.
FLAG_CANCEL_CURRENT Если PendingIntent с тем же Intent уже существует, отменить его и создать новый.
FLAG_UPDATE_CURRENT Если PendingIntent с тем же Intent уже существует, обновить его Extra.
FLAG_IMMUTABLE PendingIntent не может быть изменен другими приложениями (рекомендуется).

При использовании PendingIntent важно указывать уникальные коды запроса (второй аргумент в методах getActivity, getService, getBroadcast), чтобы различать их.