Eu tenho um aplicativo com notificações que abrem uma certa atividade se eu clicar nelas. Quero que, se eu clicar na notificação e a atividade já estiver aberta, ela não será iniciada novamente, mas apenas trazida para a frente.
Eu pensei que poderia fazê-lo com a bandeira FLAG_ACTIVITY_BROUGHT_TO_FRONT
ou FLAG_ACTIVITY_REORDER_TO_FRONT
, mas ele continua abrindo novamente, então eu tenho a atividade duas vezes.
Este é o meu código:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Posso gerenciá-lo com sinalizadores ou devo armazenar uma variável em SharedPreferences para verificar se está aberta ou não?
Obrigado!
android
notifications
android-activity
Desenvolvedor PX
fonte
fonte
Respostas:
Você precisa definir o
launchMode
atributo doActivity
qual está começandosingleTop
. Isso fará com que os Intents recebidos sejam entregues à instância existente, em vez de iniciar uma nova instância quando elaActivity
já estiver no topo da pilha da tarefa.Isso é feito no manifesto, adicionando
android:launchMode="singleTop"
ao<activity>
elemento Para acessar o Intent mais recente (se você estiver interessado em algum dado que possa ter passado com ele), substitua oonNewIntent()
seuActivity
.fonte
Tente configurar os sinalizadores para
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
.Da documentação para FLAG_ACTIVITY_CLEAR_TOP (ênfase minha):
fonte
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
.Use
onNewIntent()
para manipular novos dados a partir da notificação, clique e atualize a atividade.Em
onNewIntent
obter o novo dados da nova intenção (que serviu pela nova notificação) e pegá-los, por exemplo:title = intent.getStringExtra("title")
em
onCreate
anteriormente :)Ele atualizará a atividade atual com novos dados de notificação.
Você também pode seguir este tutorial.
fonte
Apenas copie o código e cole-o na sua atividade principal do iniciador.
Aqui está a resposta original
fonte
Eu acho que você deve adicionar alguma lógica para fazê-lo funcionar, talvez isso possa ajudar:
Por exemplo, eu tenho uma tela inicial (Launcher e MAIN) do APP:
E no meu FirebaseService, fiz o seguinte:
fonte
fonte