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:
Intentnã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 esseIntent. - Unicidade: Diferentes
PendingIntentsã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 umaActivity.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 umService.getForegroundService(Context context, int requestCode, Intent intent, int flags): inicia umForeground 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:PendingIntentpode ser usado apenas uma vez.FLAG_NO_CREATE: Se oPendingIntentnão existir, ele não é criado, retornanull.FLAG_CANCEL_CURRENT: Se umPendingIntentcom os mesmos parâmetros já existir, ele é cancelado, e um novo é criado.FLAG_UPDATE_CURRENT: Se umPendingIntentcom 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 umPendingIntentimutável.FLAG_MUTABLE: Cria umPendingIntentmutável (usar com cautela, pode ser vulnerável).
A escolha da bandeira correta é crucial para o funcionamento correto e a segurança.