Sobes.tech
Middle

Cos'è PendingIntent?

sobes.tech AI

Risposta dell'AI

PendingIntent è un token che fornisce a un'altra applicazione la possibilità di eseguire parte del codice a nome della tua applicazione con le tue autorizzazioni.

Viene utilizzato per:

  • Notifiche (avviare un'attività al clic sulla notifica).
  • Widget desktop (gestire i clic dell'utente).
  • Servizi di pianificazione (compiti ricorrenti con AlarmManager).

Principali differenze rispetto a un Intent normale:

  • PendingIntent viene passato a un'altra applicazione.
  • PendingIntent mantiene le autorizzazioni dell'applicazione originale.

Tipi di PendingIntent:

  • getActivity(): per avviare un'Activity.
    // Creare un PendingIntent per avviare un'Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): per avviare un Service.
    // Creare un PendingIntent per avviare un Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): per inviare un messaggio broadcast.
    // Creare un PendingIntent per inviare un Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Le flag di PendingIntent influenzano il comportamento:

Flag Descrizione
FLAG_ONE_SHOT Il PendingIntent può essere usato solo una volta.
FLAG_NO_CREATE Se il PendingIntent non esiste, non crearlo, restituisce null.
FLAG_CANCEL_CURRENT Se esiste già un PendingIntent con lo stesso Intent, annullarlo e crearne uno nuovo.
FLAG_UPDATE_CURRENT Se esiste già un PendingIntent con lo stesso Intent, aggiorna i suoi Extra.
FLAG_IMMUTABLE Il PendingIntent non può essere modificato da altre applicazioni (consigliato).

Quando si utilizza PendingIntent, è importante specificare codici di richiesta univoci (secondo argomento nei metodi getActivity, getService, getBroadcast) per distinguerli.