Sobes.tech
Middle

O que é PendingIntent?

sobes.tech IA

Resposta da IA

Isto é uma envoltória em torno de Intent, que delega a autoridade a outro aplicativo para executar esse Intent em nosso nome no futuro.

Características principais:

  • Execução diferida: Intent não é executado imediatamente, mas mais tarde, por outro componente.
  • Permissões: O componente ao qual o PendingIntent é passado obtém as mesmas permissões que nossa aplicação para executar esse Intent.
  • Unicidade: Diferentes PendingIntent são considerados iguais se coincidirem o tipo de componente, a ação (action), os dados (data), as categorias (categories) e as flags (flags).
  • Uso: Comumente usado para notificações, tarefas em segundo plano, widgets e AlarmManager.

Os tipos de PendingIntent correspondem aos tipos de componentes de destino:

  • getActivity(Context context, int requestCode, Intent intent, int flags): inicia uma Activity.
  • getBroadcast(Context context, int requestCode, Intent intent, int flags): envia um sinal de difusão.
  • getService(Context context, int requestCode, Intent intent, int flags): inicia ou conecta-se a um Service.
  • getForegroundService(Context context, int requestCode, Intent intent, int flags): inicia um Foreground Service.
// Exemplo de criação de PendingIntent para Notificações
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0, // requestCode, usado para distinguir o PendingIntent
    notificationIntent,
    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // Flags para gerenciar o comportamento
);
// Agora, esse pendingIntent pode ser passado, por exemplo, para uma Notificação

As flags (flags) influenciam o comportamento ao criar ou atualizar um PendingIntent existente:

  • FLAG_ONE_SHOT: PendingIntent pode ser usado apenas uma vez.
  • FLAG_NO_CREATE: Se o PendingIntent não existir, ele não é criado, retorna null.
  • FLAG_CANCEL_CURRENT: Se um PendingIntent com os mesmos parâmetros já existir, ele é cancelado, e um novo é criado.
  • FLAG_UPDATE_CURRENT: Se um PendingIntent com os mesmos parâmetros já existir, seus dados adicionais (dados extras) são atualizados.
  • FLAG_IMMUTABLE (obrigatório a partir de S/API 31 na maioria dos casos): Cria um PendingIntent imutável.
  • FLAG_MUTABLE: Cria um PendingIntent mutável (usar com cautela, pode ser vulnerável).

A escolha da bandeira correta é crucial para o funcionamento correto e a segurança.