web-dev-qa-db-fra.com

Xamarin ferme l'application Android sur le bouton de retour

J'ai essayé 3 façons différentes 

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
    System.Environment.Exit(0);

public override void OnBackPressed()
{
    Finish();
}

public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
{
    if (keyCode == Keycode.Back)
    {
            System.Environment.Exit(0);
            return true;
    }
    return base.OnKeyDown(keyCode, e);
}

Aucune de ces réponses ne semble fonctionner

6
dimitris93

Vous pouvez utiliser DepedencyService pour fermer une application lorsque vous appuyez sur le bouton de retour physique:

Dans votre interface utilisateur (PCL), procédez comme suit:

protected override bool OnBackButtonPressed()
{
   if (Device.OS == TargetPlatform.Android)
       DependencyService.Get<IAndroidMethods>().CloseApp();

   return base.OnBackButtonPressed();
}

Créez également une interface (dans votre interface utilisateur PCL):

public interface IAndroidMethods
{
    void CloseApp();
}

Maintenant, implémentez la logique spécifique à Android dans votre projet Android:

[Assembly: Xamarin.Forms.Dependency(typeof(AndroidMethods))]
namespace Your.Namespace
{
   public class AndroidMethods : IAndroidMethods
   {
       public void CloseApp()
       {
            Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
       }
   }
}
18
Demitrian

Si vous souhaitez quitter App sans tuer et revenir à l'écran d'accueil, faites-le si vous souhaitez le reprendre à partir de l'endroit où il a été fermé. vous pouvez faire la mise en œuvre comme suit dans votre activité associée.

  public override void OnBackPressed()
    {
        Intent startMain = new Intent(Intent.ActionMain);
        startMain.AddCategory(Intent.CategoryHome);
        startMain.SetFlags(ActivityFlags.NewTask);
        StartActivity(startMain);

    }

J'espère que cela t'aides.

3
Ravi Anand

J'ai essayé ce code, ça marche de mon côté. J'espère que ce code vous aide.

protected override bool OnBackButtonPressed()
    {
        Device.BeginInvokeOnMainThread(async () =>
        {
            var result = await DisplayAlert("Alert!", "Do you really want to exit the application?", "Yes", "No");
            if (result)
            {
                if (Device.OS == TargetPlatform.Android)
                {
                    Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
                }
            }
        });
        return true;
    }
1
Nitika Chopra
Finish(); 

Travaillé pour moi Exécuté à partir de l'activité principale.

0
user489998

Essayez ceci dans votre activité:

this.FinishAffinity();

Bonne chance!!

0
raBinn
public override void OnBackPressed()
{
    Finish();
    Android.OS.Process.KillProcess (Android.OS.Process.MyPid ());
}
0
jojobarcream

Vous pouvez également demander à l'utilisateur de confirmer la sortie de l'application:

public override void OnBackPressed()
{
    RunOnUiThread(
        async () =>
        {
            var isCloseApp = await AlertAsync(this, "NameOfApp", "Do you want to close this app?", "Yes", "No");

            if (isCloseApp)
            {
                var activity = (Activity)Forms.Context;
                activity.FinishAffinity();
            }
        });
}

public Task<bool> AlertAsync(Context context, string title, string message, string positiveButton, string negativeButton)
{
    var tcs = new TaskCompletionSource<bool>();

    using (var db = new AlertDialog.Builder(context))
    {
        db.SetTitle(title);
        db.SetMessage(message);
        db.SetPositiveButton(positiveButton, (sender, args) => { tcs.TrySetResult(true); });
        db.SetNegativeButton(negativeButton, (sender, args) => { tcs.TrySetResult(false); });
        db.Show();
    }

    return tcs.Task;
}

Xamarin.Android attend AlertDialog.Builder

0
Anastasiia