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 从前台和后台删除应用程序,但是应用程序进程仍然处于活动状态,因此需要第二个命令。
我的项目是用主从导航构建的。 列表中一共有三个页面,分别是资源、联系人和登录。 在 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 项目
页面中的方法 OnBackButtonPressedprotected 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 从前台和后台删除应用程序,但是应用程序进程仍然处于活动状态,因此需要第二个命令。