Xamarin Forms中如何退出App?

How to exit the App in Xamarin Forms?

我的项目是用主从导航构建的。 列表中一共有三个页面,分别是资源、联系人和登录。 在 iOS 中一切正常,但是当用户按下 Droid/WinPhone 设备硬件后退按钮时,应用程序应该退出。 Xamarin Forms 是否有任何适用于所有设备的应用程序退出机制? (我的意思是本机代码不依赖于平台) 提前致谢。

我是这样做的

我在 xamarin 表单中添加了界面

public interface INativeHelper
{
    void CloseApp();
}

在 android 项目中我实现了 INativeHelper

public class NativeHelper : INativeHelper
{
    public void CloseApp()
    {
        Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
    }                
}

IOS

中 INativeHelper 的实现
public class NativeHelper : INativeHelper
{
    public void CloseApp()
    {
        Process.GetCurrentProcess().CloseMainWindow();
        Process.GetCurrentProcess().Close();
    }       
}

然后只需覆盖 Xamarin.Forms 项目

页面中的方法 OnBackButtonPressed
protected override bool OnBackButtonPressed()
    {
        INativeHelper nativeHelper = null;
        nativeHelper = DependencyService.Get<INativeHelper>();
        if (nativeHelper != null)
        {
            nativeHelper.CloseApp();
        }  

        return base.OnBackButtonPressed();
    }

WinPhone我没有实现,不过应该差不多。

据我所知,在 Xamarin 应用程序中没有退出应用程序的本机方法。

唯一的办法就是使用依赖服务。覆盖 ContentPage 中的 OnBackButtonPressed 函数并检查它是最后一页:

protected override bool OnBackButtonPressed()
{
 if(navigation.NavigationStack.Count == 1)//navigation is MainPage.Navigation
  DependencyService.Get<YourDependencyInterface>().CloseApp();
}

对于 Android 在你的Android依赖项中 class:

public void CloseApp()
{
 (Xamarin.Forms.Forms.Context as Activity).Finish();
}

至于 WinPhone 我不确定,但我相信它可以用同样的方式完成 - 依赖服务。

您可以使用 DepedencyService 在按下物理后退按钮时关闭应用程序:

在您的 UI (PCL) 中,执行以下操作:

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

   return base.OnBackButtonPressed();
}

现在在您的 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());
       }
   }
}

同时创建一个接口(在您的 UI PCL 中):

public interface IAndroidMethods
{
    void CloseApp();
}

这是找到的更简单的方法:

public void QuitApp(object sender, EventArgs args)
{
    Process.GetCurrentProcess().CloseMainWindow();
    Process.GetCurrentProcess().Close();
}

PS:已在 android

中测试

在尝试了以上所有内容后,我发现上面的 none 适用于 Google Pixel 3a,最新版本为 Android

最接近的命令是

Android.OS.Process.KillProcess(Android.OS.Process.MyPid());

然而,它使应用程序的剩余部分在后台仍然可见。

从 Android Main Activity

调用时,以下内容对我有用
    public void ExitApp()
    {
        this.FinishAndRemoveTask();
        Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
    }

第一行 FinishAndRemoveTask 从前台和后台删除应用程序,但是应用程序进程仍然处于活动状态,因此需要第二个命令。