Como removo meu aplicativo do alternador de tarefas no Windows Phone?
-
21-12-2019 - |
Pergunta
Eu tenho um aplicativo universal do Windows Phone (iniciado a partir do modelo Blank App) que consiste em uma MainPage e três páginas secundárias.A navegação entre eles está funcionando conforme o esperado (graças, em parte, esta página do MSDN).
O problema que estou enfrentando é que, quando estou na página principal, quando os usuários pressionam o botão Voltar do hardware, meu aplicativo é colocado em segundo plano, mas o cartão do meu aplicativo permanece no alternador de tarefas.Isso acontece independentemente de o depurador estar conectado ou não.
Tentei isso em um novo projeto baseado no modelo Pivot App (WP) e vejo o mesmo problema.
Quero "fechar" meu aplicativo quando o usuário pressionar Voltar na página principal, para que ele não esteja mais no alternador de tarefas.Há algo que preciso fazer manualmente?
Solução
Você pode sair do seu aplicativo com Application.Current.Exit();na função HardwareButtons_BackPressed abaixo.
public MainPage()
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
/* When you don't know the namespace you can use this code instead of the lower
string[] Namespace = Frame.CurrentSourcePageType.FullName.Split('.');
if (!e.Handled && Frame.CurrentSourcePageType.FullName == Namespace[0] + ".MainPage")
Application.Current.Exit();
*/
if (!e.Handled && Frame.CurrentSourcePageType.FullName == "NAMESPACE.MainPage")
Application.Current.Exit();
}
eu espero que isso funcione
Atenciosamente, cristão
Outras dicas
Foi assim que acabei implementando, com as dicas de user2799780 e Romasz, embora não tenha 100% de certeza de que não estou (des) registrando duas vezes o manipulador. Depende se sempre existe um NavigatedFrom para cada NavigatedTo, eu acho.
EDITAR:Fui lembrado (ver comentários) que ao ser suspenso, um aplicativo recebe o evento OnNavigatedFrom, mas ao retomar, não verá o evento OnNavigatedTo, fazendo com que o manipulador não seja registrado nesse caso. A implementação abaixo provavelmente foi afetada por este bug.
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
// When we're on this page, pressing Back should close the app
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
protected override async void OnNavigatedFrom(NavigationEventArgs e)
{
// When we leave this page, pressing Back should no longer close the app
Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}
private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (!e.Handled)
{
Application.Current.Exit();
}
}