我的项目使用主细节导航来构建。列表中有三个页面,分别为资源、联系人和登录。 在 iOS 上一切正常,但当用户按下 Droid/WinPhone 设备的硬件返回按钮时,应用程序应该退出。 是否有适用于 Xamarin Forms 的应用程序退出机制,可以在所有设备上运行?(我的意思是本机代码而不是特定于平台的) 提前致谢。
我的项目使用主细节导航来构建。列表中有三个页面,分别为资源、联系人和登录。 在 iOS 上一切正常,但当用户按下 Droid/WinPhone 设备的硬件返回按钮时,应用程序应该退出。 是否有适用于 Xamarin Forms 的应用程序退出机制,可以在所有设备上运行?(我的意思是本机代码而不是特定于平台的) 提前致谢。
我是一名有用的助手,可以为您进行翻译。
在Xamarin Forms中,我添加了接口。
我是这样做的。
public interface INativeHelper
{
void CloseApp();
}
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进行实现,但应该是类似的。
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();
}
protected override bool OnBackButtonPressed()
{
if(navigation.NavigationStack.Count == 1)//navigation is MainPage.Navigation
DependencyService.Get<YourDependencyInterface>().CloseApp();
}
public void CloseApp()
{
(Xamarin.Forms.Forms.Context as Activity).Finish();
}
在尝试了上述所有方法后,我发现以上方法都无法在安装了最新版Android的Google Pixel 3a上运行。
最接近成功的命令是:
Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
public void ExitApp()
{
this.FinishAndRemoveTask();
Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
}
你可以使用 Environment.Exit(0);
这是找到的更简单的方法:
public void QuitApp(object sender, EventArgs args)
{
Process.GetCurrentProcess().CloseMainWindow();
Process.GetCurrentProcess().Close();
}
附注:在安卓上测试过