Sobes.tech
Middle

¿Qué es PendingIntent?

sobes.tech AI

Respuesta de la IA

PendingIntent es un token que proporciona a otra aplicación la capacidad de ejecutar parte del código en nombre de su aplicación con sus permisos.

Se utiliza para:

  • Notificaciones (iniciar una actividad al pulsar la notificación).
  • Widgets de escritorio (procesar pulsaciones del usuario).
  • Servicios de planificador (tareas recurrentes con AlarmManager).

Diferencias principales respecto a un Intent normal:

  • PendingIntent se pasa a otra aplicación.
  • PendingIntent mantiene los permisos de la aplicación original.

Tipos de PendingIntent:

  • getActivity(): Para iniciar una Activity.
    // Crear PendingIntent para iniciar una Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): Para iniciar un Service.
    // Crear PendingIntent para iniciar un Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): Para enviar un mensaje broadcast.
    // Crear PendingIntent para enviar un Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Las banderas de PendingIntent afectan su comportamiento:

Bandera Descripción
FLAG_ONE_SHOT El PendingIntent solo puede usarse una vez.
FLAG_NO_CREATE Si el PendingIntent no existe, no crearlo, devolver null.
FLAG_CANCEL_CURRENT Si ya existe un PendingIntent con el mismo Intent, cancelarlo y crear uno nuevo.
FLAG_UPDATE_CURRENT Si ya existe un PendingIntent con el mismo Intent, actualizar sus Extras.
FLAG_IMMUTABLE El PendingIntent no puede ser modificado por otras aplicaciones (recomendado).

Al usar PendingIntent, es importante especificar códigos de solicitud únicos (el segundo argumento en los métodos getActivity, getService, getBroadcast) para distinguirlos.