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);
}
上記のどれも動作していないようです
物理的な戻るボタンが押されたときに アプリを閉じるための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());
}
}
}
強制終了せずにアプリを終了してホーム画面に戻りたい場合、閉じたところから再開したい場合。関連するアクティビティで次のように実装できます。
public override void OnBackPressed()
{
Intent startMain = new Intent(Intent.ActionMain);
startMain.AddCategory(Intent.CategoryHome);
startMain.SetFlags(ActivityFlags.NewTask);
StartActivity(startMain);
}
お役に立てれば。
私はこのコードを試しました、それは私の側から動作します。このコードがお役に立てば幸いです。
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;
}
この解決策を試してください:
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;
}
Finish();
私のために働いた。メインアクティビティから実行されます。
あなたの活動でこれを試してください:
this.FinishAffinity();
幸運を!!
public override void OnBackPressed()
{
Finish();
Android.OS.Process.KillProcess (Android.OS.Process.MyPid ());
}
また、ユーザーに終了アプリの確認を求めることもできます。
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;
}