我正在我的 PhoneGap Windows Phone 7 应用程序上开发一个插件。该插件在 Windows Phone 7 UI 上启动一个线程来启动摄像头以扫描 QR 码。当它完成执行时,它会返回到 PhoneGap UI。
问题是如果用户在执行本机插件代码时按下后退按钮,应用程序就会崩溃。
如何覆盖我的 PhoneGap 插件的后退按钮,以便我可以返回到 PhoneGap UI?
我正在我的 PhoneGap Windows Phone 7 应用程序上开发一个插件。该插件在 Windows Phone 7 UI 上启动一个线程来启动摄像头以扫描 QR 码。当它完成执行时,它会返回到 PhoneGap UI。
问题是如果用户在执行本机插件代码时按下后退按钮,应用程序就会崩溃。
如何覆盖我的 PhoneGap 插件的后退按钮,以便我可以返回到 PhoneGap UI?
我想出了一个可行的解决方案来解决这个问题,但这并不理想。
在执行本机插件代码时按下后退按钮时,会在 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 UI 上创建了一个新线程时才有效,看起来像这样:
var dispatcherOperation = Deployment.Current.Dispatcher.BeginInvoke(() => /* Your method */
另外需要注意的是,插件代码在按下后退按钮后会继续执行。使用我的代码,如果 QR 码扫描没有产生结果,它会尝试返回 PhoneGap UI,但这会失败,因为返回按钮事件已经返回到 PhoneGap UI,所以我只是删除了那个我的插件代码中的声明。