如何在Xamarin Forms中退出应用程序?

问题描述 投票:1回答:4

我的项目是使用主 - 细节导航构建的。列表中共有三个页面,分别为Resources,Contacts和Login。在iOS中一切正常,但当用户按下Droid / WinPhone设备硬件后退按钮时,应用程序应退出。是否有适用于所有设备的Xamarin Forms的app-exit机制。 (我的意思是本机代码不依赖于平台)提前感谢。

xamarin.android xamarin.forms xamarin.windows
4个回答
1
投票

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

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

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

对于YourAndroidDependency类中的Android:

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

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


6
投票

我这样做了

在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实现,但它应该是类似的。


3
投票

按下物理后退按钮时,可以使用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();
}

0
投票

这是更简单的方法:

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

PS:在android中测试过

© www.soinside.com 2019 - 2024. All rights reserved.