Atualmente, tenho uma Atividade que, quando exibida, uma Notificação também será exibida na barra de Notificações.
Isso ocorre para que, quando o Usuário pressionar a tecla Início e a Atividade for empurrada para segundo plano, eles possam voltar à Atividade por meio da Notificação.
O problema surge quando um usuário pressiona o botão Voltar, minha Atividade é destruída, mas a Notificação permanece como eu quero que o usuário possa retornar, mas ainda pode acessar a Atividade por meio da Notificação. Mas quando um USUÁRIO tenta isso, recebo Null Pointers como uma tentativa de iniciar uma nova atividade em vez de trazer de volta a antiga.
Então, basicamente, quero que o botão Voltar atue exatamente da mesma forma que o botão Início e aqui está como tentei até agora:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
No entanto, o código acima ainda parece permitir que minha Atividade seja destruída. Como posso impedir que minha Atividade seja destruída quando o botão Voltar é pressionado?
fonte
, the
<` deve se tornar um>
.Respostas:
Remova seu ouvinte de chaves ou retorne
true
quando tiverKEY_BACK
.Você só precisa do seguinte para pegar a chave de volta (Certifique-se para não chamar super- em
onBackPressed()
).Além disso, se você planeja executar um serviço em segundo plano, verifique
startForeground()
e tenha uma notificação em andamento, caso contrário o Android matará seu serviço se precisar liberar memória.fonte
Foi mais fácil implementá-lo apenas com uma linha de código:
fonte
Acho que o que você deseja é não substituir o botão voltar (isso não parece uma boa idéia - o sistema operacional Android define esse comportamento, por que alterá-lo?), Mas usar o Ciclo de Vida da Atividade e manter suas configurações / dados no evento onSaveInstanceState (Bundle) .
Em seguida, você usa onCreate (Bundle) para obter tudo desse pacote persistente e recriar seu estado.
Considere o código psuedo acima para apontar na direção certa. A leitura do Ciclo de Vida da Atividade deve ajudá-lo a determinar a melhor maneira de realizar o que você está procurando.
fonte
simplesmente faça isso ..
comentando o //super.onBackPressed (); fará o truque
fonte
Tente o seguinte:
fonte
Caso você queira lidar com o comportamento do botão voltar (na parte inferior do telefone) e do botão home (o da esquerda da barra de ação), essa atividade personalizada que estou usando no meu projeto pode ajudá-lo .
Exemplo de uso em sua atividade:
fonte
fonte
Em Kotlin:
Para mais informações, você pode verificar isso .
Há também uma pergunta específica sobre como substituir o botão Voltar no Kotlin.
fonte