Sobes.tech
Middle

O que é PendingIntent?

sobes.tech IA

Resposta da IA

O PendingIntent é um token que fornece a outra aplicação a capacidade de executar parte do código em nome da sua aplicação com as suas permissões.

É utilizado para:

  • Notificações (iniciar uma atividade ao clicar na notificação).
  • Widgets de desktop (processar cliques do utilizador).
  • Serviços de agendamento (tarefas recorrentes com AlarmManager).

Principais diferenças em relação a um Intent normal:

  • PendingIntent é passado para outra aplicação.
  • PendingIntent mantém as permissões da aplicação original.

Tipos de PendingIntent:

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

Flags de PendingIntent que influenciam o seu comportamento:

Flag Descrição
FLAG_ONE_SHOT O PendingIntent pode ser usado apenas uma vez.
FLAG_NO_CREATE Se o PendingIntent não existir, não criá-lo, retornar null.
FLAG_CANCEL_CURRENT Se já existir um PendingIntent com o mesmo Intent, cancelá-lo e criar um novo.
FLAG_UPDATE_CURRENT Se já existir um PendingIntent com o mesmo Intent, atualizar os Extras.
FLAG_IMMUTABLE O PendingIntent não pode ser alterado por outras aplicações (recomendado).

Ao usar PendingIntent, é importante especificar códigos de requisição únicos (segundo argumento nos métodos getActivity, getService, getBroadcast) para diferenciá-los.