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
AlarmManagersegí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
);