PENANDONTENTENT DE CONFLICitos de notificação e histórico de aplicativos
-
23-09-2019 - |
Pergunta
Estou criando uma notificação com algo semelhante ao seguinte:
Intent ni = new Intent(this, SomeActivity.class);
ni.putExtra("somestring", "somedata");
PendingIntent contentIntent =
PendingIntent.getActivity(this, 0, ni,
PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT);
Context context = getApplicationContext();
notification.setLatestEventInfo(context,
res.getString(R.string.app_name),
text, contentIntent);
A chave aqui são os dados extras sobre a intenção da notificação. Depois de clicar na notificação e ela traz à tona uma somatividade, ele traz à tona a atividade e os dados extras estão disponíveis.
No entanto, se eu sair do aplicativo, segure o botão home até que a lista de atividades recentes apareça e opte por abrir o aplicativo novamente, os dados extras ainda serão passados. Existe uma maneira de fazer esses dados passarem só Se o aplicativo for aberto através da notificação e não da lista de atividades recentes?
Solução
Parece que posso verificar se a atividade foi lançada a partir da caixa de diálogo recentes de atividades com isso:
if((getIntent().getFlags() &
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
// ignore extras
}
else {
// do not ignore extras
}
Não sei se essa é a melhor maneira, mas funciona.
Outras dicas
Use um diferente Intent
. Por exemplo, você pode adicionar um <intent-filter>
para alguma string de ação personalizada e use -a para o seu Notification
-Sediada PendingIntent
. Em outras palavras, você não pode alterar a caixa de diálogo de atividades mais recentes, mas pode mudar seu lado do conflito.
Tente com:
int NOTIFICATION_CODE = 1;
PendingIntent contentIntent =
PendingIntent.getActivity(this,
NOTIFICATION_CODE,
ni,
PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_ONE_SHOT
);
Alterar Notification_code Valor para cada notificação.