Sobes.tech
Middle

Czym jest PendingIntent?

sobes.tech AI

Odpowiedź od AI

PendingIntent to token, który umożliwia innemu aplikacji wykonanie części kodu w imieniu Twojej aplikacji z Twoimi uprawnieniami.

Jest używany do:

  • Powiadomień (uruchomienie aktywności po kliknięciu powiadomienia).
  • Widżetów pulpitu (obsługa kliknięć użytkownika).
  • Usług planistycznych (zadania powtarzające się z AlarmManager).

Główne różnice w stosunku do zwykłego Intent:

  • PendingIntent jest przekazywany do innej aplikacji.
  • PendingIntent zachowuje uprawnienia oryginalnej aplikacji.

Typy PendingIntent:

  • getActivity(): do uruchomienia Activity.
    // Tworzenie PendingIntent do uruchomienia Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): do uruchomienia Service.
    // Tworzenie PendingIntent do uruchomienia Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): do wysłania wiadomości broadcast.
    // Tworzenie PendingIntent do wysłania Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Flagi PendingIntent wpływają na zachowanie:

Flaga Opis
FLAG_ONE_SHOT PendingIntent można użyć tylko raz.
FLAG_NO_CREATE Jeśli PendingIntent nie istnieje, nie twórz go, zwróć null.
FLAG_CANCEL_CURRENT Jeśli istnieje już PendingIntent z tym samym Intent, anuluj go i utwórz nowy.
FLAG_UPDATE_CURRENT Jeśli istnieje już PendingIntent z tym samym Intent, zaktualizuj jego Extras.
FLAG_IMMUTABLE PendingIntent nie może być zmieniony przez inne aplikacje (zalecane).

Podczas korzystania z PendingIntent ważne jest, aby podać unikalne kody zapytań (drugi argument w metodach getActivity, getService, getBroadcast), aby je odróżnić.