Sobes.tech
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: Intent nevykdomas iš karto, o vėliau, kitu komponentu.
  • Leidimai: Komponentas, kuriam perduodamas PendingIntent, gauna tuos pačius leidimus kaip ir mūsų programa šiam Intent įvykdyti.
  • Unikalumas: Skirtingi PendingIntent laikomi 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žia Activity.
  • 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 prie Service.
  • getForegroundService(Context context, int requestCode, Intent intent, int flags): paleidžia Foreground 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: PendingIntent gali būti naudojamas tik vieną kartą.
  • FLAG_NO_CREATE: Jei PendingIntent neegzistuoja, jis nesukuriamas, grąžinama null.
  • FLAG_CANCEL_CURRENT: Jei jau egzistuoja PendingIntent su tais pačiais parametrais, jis atšaukiamas ir sukuriamas naujas.
  • FLAG_UPDATE_CURRENT: Jei jau egzistuoja PendingIntent su tais pačiais parametrais, jo papildomi duomenys (Extra data) atnaujinami.
  • FLAG_IMMUTABLE (nuo S/API 31 būtina daugeliu atvejų): Sukuria nekeičiami PendingIntent.
  • FLAG_MUTABLE: Sukuria keičiamą PendingIntent (naudoti atsargiai, gali būti pažeidžiamas).

Tinkamas žymės pasirinkimas yra svarbus teisingam darbui ir saugumui.