我正在尝试将现有的 phonegap 应用程序(iOS/Android)移植到 WP7。一切正常,除了处理“后退”按钮的代码。目前有后退按钮的处理程序,如果逻辑要求它会重新加载页面,或者如果用户在“第一”页中则关闭应用程序。
代码:
if (doLogic) {
// some update logic
} else {
// try to close app
device.exitApp();
}
不幸的是,虽然更新逻辑有效,但我无法关闭应用程序。
我正在尝试将现有的 phonegap 应用程序(iOS/Android)移植到 WP7。一切正常,除了处理“后退”按钮的代码。目前有后退按钮的处理程序,如果逻辑要求它会重新加载页面,或者如果用户在“第一”页中则关闭应用程序。
代码:
if (doLogic) {
// some update logic
} else {
// try to close app
device.exitApp();
}
不幸的是,虽然更新逻辑有效,但我无法关闭应用程序。
您不能强制退出 wp7 上的应用程序。 它在 Wp7 设计指南中。
让用户按回,如果你想让他退出,不要取消它。
正如@TDaver 所提到的,Windows Phone 应用程序并不是要关闭的。试图关闭它们违反了开发指南,并且该应用程序可能会被拒绝。
让默认的导航堆栈机制来处理它。
要退出应用程序,无论您在哪个页面:
if (NavigationService.CanGoBack)
{
while (NavigationService.RemoveBackEntry() != null)
{
NavigationService.RemoveBackEntry();
}
}
似乎使用当前的 PhoneGap 实现不可能添加后退按钮处理程序并且仍然允许应用程序使用后退按钮关闭。
通过更改 CordovaView.xaml.cs 中的 page_BackKeyPress 方法,只需很少侵入 PhoneGap 即可解决此问题
将 if(OverrideBackButton) 更改为
string cancel = "false";
if (OverrideBackButton)
{
try
{
cancel = CordovaBrowser.InvokeScript("shouldCancelBackButton") as string;
Console.WriteLine("CancelBackButton response: " + cancel);
}
catch (Exception ex)
{
Console.WriteLine("Exception while checking for backbutton cancel into cordova view: " + ex.Message);
}
try
{
e.Cancel = cancel == "true";
CordovaBrowser.InvokeScript("CordovaCommandResult", new string[] { "backbutton" });
}
catch (Exception ex)
{
Console.WriteLine("Exception while invoking backbutton into cordova view: " + ex.Message);
}
}
现在我可以在页面中添加 shouldCancelBackButton JS 函数并基于状态抑制或执行默认的后退按钮处理程序行为。
可能这不是最好的解决方案,但不幸的是,我没有时间更熟悉 PhoneGap 的内部结构。