Sobes.tech
Middle

Dlaczego używa się PendingIntent zamiast zwykłego Intent?

sobes.tech AI

Odpowiedź od AI

PendingIntent pozwala przekazać zamiar (Intent) innemu programowi, aby mógł go wykonać w imieniu Twojej aplikacji w późniejszym czasie, nawet jeśli Twoja aplikacja została zamknięta.

Główne powody używania PendingIntent:

  • Powiadomienia: Uruchomienie aktywności lub serwisu po kliknięciu powiadomienia, nawet jeśli aplikacja w tym momencie nie jest aktywna.
  • Widżety na pulpicie: Uruchomienie działania w aplikacji po interakcji z widżetem.
  • Budzik i zadania opóźnione: Wykonanie kodu aplikacji w określonym czasie lub na podstawie warunku za pomocą AlarmManager.
  • SMS i inne odbiorniki rozgłoszeniowe: Wykonanie działania w aplikacji po otrzymaniu rozgłoszeniowego zamiaru.

Zwykły Intent jest wykonywany natychmiast i w kontekście Twojej aplikacji. PendingIntent jest opakowaniem nad Intent, które daje innemu programowi pozwolenie na wykonanie tego Intent z tymi samymi uprawnieniami, jakby to zrobiła Twoja aplikacja.

Podczas tworzenia PendingIntent należy wybrać typ komponentu, który zostanie uruchomiony: aktywność (getActivity), serwis (getService) lub odbiornik rozgłoszeniowy (getBroadcast). Dodatkowo określa się flagi, które determinują zachowanie PendingIntent, np. jak obsługiwać istniejące intencje (FLAG_UPDATE_CURRENT, FLAG_CANCEL_CURRENT).

Przykład tworzenia PendingIntent do uruchomienia aktywności:

// Tworzymy intencję do uruchomienia MainActivity
Intent intent = new Intent(context, MainActivity.class);
// Opakowujemy intencję w PendingIntent
// requestCode służy do identyfikacji pending intent
// FLAG_UPDATE_CURRENT: jeśli taki pending intent już istnieje, zaktualizuj go
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0,
    intent,
    PendingIntent.FLAG_UPDATE_CURRENT
);