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:
Intentsa 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 tohtoIntent. - Unikátnosť: Rôzne
PendingIntentsa 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í kService.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:PendingIntentmôže byť použitý iba raz.FLAG_NO_CREATE: AkPendingIntentneexistuje, nevytvorí sa, vráti sanull.FLAG_CANCEL_CURRENT: Ak už existujePendingIntents rovnakými parametrami, zruší sa a vytvorí sa nový.FLAG_UPDATE_CURRENT: Ak už existujePendingIntents 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ť.