Sobes.tech
Middle

Какво е PendingIntent?

sobes.tech AI

Отговор от AI

Това е обвивка около Intent, която делегира пълномощия на друго приложение да изпълни този Intent от наше име в бъдеще.

Ключови характеристики:

  • Отложено изпълнение: Intent се изпълнява не веднага, а по-късно, от друг компонент.
  • Разрешения: Компонентът, на който се предава PendingIntent, получава същите разрешения като нашето приложение за изпълнение на този Intent.
  • Уникалност: Различните PendingIntent се считат за еднакви, ако имат съвпадащи тип на компонента, действие (action), данни (data), категории (categories) и флагове (flags).
  • Използване: Често се използва за известия, фонови задачи, джаджи и AlarmManager.

Типовете PendingIntent съответстват на типовете целеви компоненти:

  • getActivity(Context context, int requestCode, Intent intent, int flags): стартира Activity.
  • getBroadcast(Context context, int requestCode, Intent intent, int flags): изпраща широковещателен сигнал.
  • getService(Context context, int requestCode, Intent intent, int flags): стартира или се свързва с Service.
  • getForegroundService(Context context, int requestCode, Intent intent, int flags): стартира Foreground Service.
// Пример за създаване на PendingIntent за Notifications
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0, // requestCode, използва се за разграничаване на PendingIntent
    notificationIntent,
    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // Флагове за управление на поведението
);
// Сега този pendingIntent може да бъде предаден, например, в Notification

Флаговете (flags) влияят на поведението при създаване или актуализиране на съществуващ PendingIntent:

  • FLAG_ONE_SHOT: PendingIntent може да бъде използван само веднъж.
  • FLAG_NO_CREATE: Ако PendingIntent не съществува, не се създава, връща се null.
  • FLAG_CANCEL_CURRENT: Ако вече съществува PendingIntent с същите параметри, той се отменя и се създава нов.
  • FLAG_UPDATE_CURRENT: Ако вече съществува PendingIntent с същите параметри, неговите допълнителни данни (Extra data) се актуализират.
  • FLAG_IMMUTABLE (от S/API 31 задължително за повечето случаи): Създава неизменяем PendingIntent.
  • FLAG_MUTABLE: Създава променяем PendingIntent (ползвайте с внимание, може да бъде уязвим).

Изборът на правилния флаг е критичен за правилната работа и сигурността.