Middle
Kas yra PendingIntent?
sobes.tech AI
Atsakymas iš AI
Tai yra apvalkalas aplink Intent, kuris perduoda įgaliojimus kitai programai įvykdyti šį Intent mūsų vardu ateityje.
Pagrindinės savybės:
- Atidėtas vykdymas:
Intentnevykdomas iš karto, o vėliau, kitu komponentu. - Leidimai: Komponentas, kuriam perduodamas
PendingIntent, gauna tuos pačius leidimus kaip ir mūsų programa šiamIntentįvykdyti. - Unikalumas: Skirtingi
PendingIntentlaikomi vienodais, jei jų komponento tipas, veiksmas (action), duomenys (data), kategorijos (categories) ir žymės (flags) sutampa. - Naudojimas: Dažnai naudojama pranešimams, foninėms užduotims, widget'ams ir AlarmManager.
PendingIntent tipai atitinka tikslinių komponentų tipus:
getActivity(Context context, int requestCode, Intent intent, int flags): paleidžiaActivity.getBroadcast(Context context, int requestCode, Intent intent, int flags): siunčia sklaidos signalą.getService(Context context, int requestCode, Intent intent, int flags): paleidžia arba jungiasi prieService.getForegroundService(Context context, int requestCode, Intent intent, int flags): paleidžiaForeground Service.
// Pavyzdys kuriant PendingIntent pranešimams
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
context,
0, // requestCode, naudojamas atskirti PendingIntent
notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // Žymės valdymui
);
// Dabar šį pendingIntent galima perduoti, pavyzdžiui, į Notification
Žymės (flags) veikia kuriant ar atnaujinant esamą PendingIntent:
FLAG_ONE_SHOT:PendingIntentgali būti naudojamas tik vieną kartą.FLAG_NO_CREATE: JeiPendingIntentneegzistuoja, jis nesukuriamas, grąžinamanull.FLAG_CANCEL_CURRENT: Jei jau egzistuojaPendingIntentsu tais pačiais parametrais, jis atšaukiamas ir sukuriamas naujas.FLAG_UPDATE_CURRENT: Jei jau egzistuojaPendingIntentsu tais pačiais parametrais, jo papildomi duomenys (Extra data) atnaujinami.FLAG_IMMUTABLE(nuo S/API 31 būtina daugeliu atvejų): Sukuria nekeičiamiPendingIntent.FLAG_MUTABLE: Sukuria keičiamąPendingIntent(naudoti atsargiai, gali būti pažeidžiamas).
Tinkamas žymės pasirinkimas yra svarbus teisingam darbui ir saugumui.