Назад к вопросам
Middle
87
questionbank
Что такое PendingIntent?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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), чтобы различать их.