Sobes.tech
Middle

Co je to PendingIntent?

sobes.tech AI

Odpověď od AI

Toto je obal kolem Intent, který deleguje oprávnění jiné aplikaci, aby tento Intent v našem jménu v budoucnu vykonala.

Klíčové vlastnosti:

  • Odložené provedení: Intent se nespouští ihned, ale později jinou komponentou.
  • Oprávnění: Komponenta, které je předán PendingIntent, získává stejná oprávnění jako naše aplikace k provedení tohoto Intent.
  • Unikátnost: Různé PendingIntent jsou považovány za stejné, pokud mají shodný typ komponenty, akci (action), data (data), kategorie (categories) a příznaky (flags).
  • Použití: Často se používá pro oznámení, úlohy na pozadí, widgety a AlarmManager.

Typy PendingIntent odpovídají typům cílových komponent:

  • getActivity(Context context, int requestCode, Intent intent, int flags): spouští Activity.
  • getBroadcast(Context context, int requestCode, Intent intent, int flags): vysílá broadcast.
  • getService(Context context, int requestCode, Intent intent, int flags): spouští nebo se připojuje ke Service.
  • getForegroundService(Context context, int requestCode, Intent intent, int flags): spouští Foreground Service.
// Příklad vytvoření PendingIntent pro oznámení
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0, // requestCode, slouží k odlišení PendingIntent
    notificationIntent,
    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // Značky pro řízení chování
);
// Tento pendingIntent lze nyní předat, například, do oznámení

Značky (flags) ovlivňují chování při vytváření nebo aktualizaci existujícího PendingIntent:

  • FLAG_ONE_SHOT: PendingIntent lze použít pouze jednou.
  • FLAG_NO_CREATE: Pokud PendingIntent neexistuje, nevytvoří se, vrací null.
  • FLAG_CANCEL_CURRENT: Pokud již existuje PendingIntent se stejnými parametry, je zrušen a vytvoří se nový.
  • FLAG_UPDATE_CURRENT: Pokud již existuje PendingIntent se stejnými parametry, aktualizují se jeho dodatečné údaje (Extra data).
  • FLAG_IMMUTABLE (povinné od S/API 31 ve většině případů): Vytváří neměnný PendingIntent.
  • FLAG_MUTABLE: Vytváří měnitelný PendingIntent (používejte opatrně, může být zranitelný).

Volba správného příznaku je klíčová pro správnou funkčnost a bezpečnost.