Sobes.tech
Middle

Miért használunk PendingIntentet egy normál Intent helyett?

sobes.tech MI

Válasz az MI-től

A PendingIntent lehetővé teszi, hogy egy szándékot (Intent) átadjunk egy másik alkalmazásnak, hogy az később végrehajtsa azt az alkalmazásod nevében, még akkor is, ha az alkalmazásod bezárult.

A PendingIntent fő okai:

  • Értesítések: Aktiválás vagy szolgáltatás indítása az értesítésre kattintva, még akkor is, ha az alkalmazás éppen nem aktív.
  • Widgetek az asztalon: Akció indítása az alkalmazásban a widgettel való interakció során.
  • Ébresztők és késleltetett feladatok: Az alkalmazáskód végrehajtása egy adott időpontban vagy feltétel alapján az AlarmManager segítségével.
  • SMS és más broadcast-alkalmazók: Akció végrehajtása az alkalmazásban broadcast szándék fogadásakor.

Egy normál Intent azonnal végrehajtódik és az alkalmazásod kontextusában. A PendingIntent viszont egy burkolat az Intent körül, amely engedélyt ad egy másik alkalmazásnak, hogy ugyanazzal a jogkörrel hajtsa végre ezt az Intent-et, mintha az alkalmazásod tenné.

A PendingIntent létrehozásakor ki kell választani a komponens típusát, amely elindul: aktivitás (getActivity), szolgáltatás (getService) vagy broadcast fogadó (getBroadcast). Emellett meg kell adni a flag-eket, amelyek meghatározzák a PendingIntent viselkedését, például, hogyan kezelje a meglévő intenteket (FLAG_UPDATE_CURRENT, FLAG_CANCEL_CURRENT).

Példa PendingIntent létrehozására aktivitás indításához:

// Létrehozunk egy intentet a MainActivity indításához
Intent intent = new Intent(context, MainActivity.class);
// Az intentet becsomagoljuk egy PendingIntentbe
// requestCode azonosítja a pending intentet
// FLAG_UPDATE_CURRENT: ha ilyen pending intent már létezik, frissítse
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0,
    intent,
    PendingIntent.FLAG_UPDATE_CURRENT
);