web-dev-qa-db-ja.com

Xamarin close Androidアプリケーションの戻るボタン

3つの方法を試しました

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);
}

上記のどれも動作していないようです

7
dimitris93

物理的な戻るボタンが押されたときに アプリを閉じるためのDepedencyService を使用できます。

UI(PCL)で、次の操作を行います。

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

   return base.OnBackButtonPressed();
}

また、UI PCLでインターフェイスを作成します。

public interface IAndroidMethods
{
    void CloseApp();
}

Androidプロジェクトに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());
       }
   }
}
21
Demitrian

強制終了せずにアプリを終了してホーム画面に戻りたい場合、閉じたところから再開したい場合。関連するアクティビティで次のように実装できます。

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

    }

お役に立てれば。

3
Ravi Anand

私はこのコードを試しました、それは私の側から動作します。このコードがお役に立てば幸いです。

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

この解決策を試してください:

protected override bool OnBackButtonPressed()
{           
    Device.BeginInvokeOnMainThread(async () => 
    {
        var res = await this.DisplayAlert("Do you really want to exit the application?", "","Yes", "No").ConfigureAwait(false);

        if (res) System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();
    });           
    return true;
}
0
VadimP
Finish(); 

私のために働いた。メインアクティビティから実行されます。

0
user489998

あなたの活動でこれを試してください:

this.FinishAffinity();

幸運を!!

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

また、ユーザーに終了アプリの確認を求めることもできます。

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 await AlertDialog.Builder

0
Anastasia