我想出了一个解决问题的工作方案,但并不理想。
当执行原生插件代码时按下后退按钮时,会在App.xaml.cs文件中调用导航失败事件。它看起来像这样:
// Code to execute if a navigation fails
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
if (System.Diagnostics.Debugger.IsAttached)
{
// A navigation has failed; break into the debugger
System.Diagnostics.Debugger.Break();
}
}
我只是替换代码上面的命令返回到PhoneGap的UI:
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
if (System.Diagnostics.Debugger.IsAttached)
{
Deployment.Current.Dispatcher.BeginInvoke(() => ((PhoneApplicationFrame)Application.Current.RootVisual).GoBack());
}
}
我觉得这个,如果你之前创建一个新的线程只会工作Windows Phone的用户界面,这将是这个样子:
var dispatcherOperation = Deployment.Current.Dispatcher.BeginInvoke(() => /* Your method */
另外要注意的是,插件代码继续执行按后退按钮后。使用我的代码,如果QR码扫描没有产生结果,它将尝试返回到PhoneGap用户界面,但这会失败,因为后退按钮事件已经返回到PhoneGap用户界面,所以我只是删除了来自我的插件代码的声明。