Sobes.tech
Middle

Čo je to PendingIntent?

sobes.tech AI

Odpoveď od AI

Toto je obal okolo Intent, ktorý deleguje oprávnenia inej aplikácii na vykonanie tohto Intent v našom mene v budúcnosti.

Kľúčové vlastnosti:

  • Oneskorené vykonanie: Intent sa vykonáva nie okamžite, ale neskôr, iným komponentom.
  • Oprávnenia: Komponent, ktorému sa odovzdáva PendingIntent, získa rovnaké oprávnenia ako naša aplikácia na vykonanie tohto Intent.
  • Unikátnosť: Rôzne PendingIntent sa považujú za rovnaké, ak majú zhodný typ komponentu, akciu (action), údaje (data), kategórie (categories) a vlajky (flags).
  • Použitie: Často sa používa pre oznámenia, pozadie úlohy, widgety a AlarmManager.

Typy PendingIntent zodpovedajú typom cieľových komponentov:

  • getActivity(Context context, int requestCode, Intent intent, int flags): spustí Activity.
  • getBroadcast(Context context, int requestCode, Intent intent, int flags): odošle vysielací signál.
  • getService(Context context, int requestCode, Intent intent, int flags): spustí alebo sa pripojí k Service.
  • getForegroundService(Context context, int requestCode, Intent intent, int flags): spustí Foreground Service.
// Príklad vytvorenia PendingIntent pre Notifications
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0, // requestCode, používa sa na rozlíšenie PendingIntent
    notificationIntent,
    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // Vlajky na riadenie správania
);
// Teraz tento pendingIntent možno odovzdať, napríklad, do Notification

Vlajky (flags) ovplyvňujú správanie pri vytváraní alebo aktualizácii existujúceho PendingIntent:

  • FLAG_ONE_SHOT: PendingIntent môže byť použitý iba raz.
  • FLAG_NO_CREATE: Ak PendingIntent neexistuje, nevytvorí sa, vráti sa null.
  • FLAG_CANCEL_CURRENT: Ak už existuje PendingIntent s rovnakými parametrami, zruší sa a vytvorí sa nový.
  • FLAG_UPDATE_CURRENT: Ak už existuje PendingIntent s rovnakými parametrami, jeho dodatočné údaje (Extra data) sa aktualizujú.
  • FLAG_IMMUTABLE (od S/API 31 povinné pre väčšinu prípadov): Vytvára nezmeniteľný PendingIntent.
  • FLAG_MUTABLE: Vytvára meniteľný PendingIntent (používať opatrne, môže byť zraniteľný).

Výber správneho vlajky je kľúčový pre správnu funkčnosť a bezpečnosť.