我的项目是使用主 - 细节导航构建的。列表中共有三个页面,分别为Resources,Contacts和Login。在iOS中一切正常,但当用户按下Droid / WinPhone设备硬件后退按钮时,应用程序应退出。是否有适用于所有设备的Xamarin Forms的app-exit机制。 (我的意思是本机代码不依赖于平台)提前感谢。
据我所知,在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,我不确定,但我相信它可以以相同的方式完成 - 依赖服务。
我这样做了
在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实现,但它应该是类似的。
按下物理后退按钮时,可以使用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中测试过