PhoneGap - 如何在执行本机代码时覆盖后退按钮(Windows Phone 7)

时间:2013-04-07 22:29:25

标签: windows-phone-7 cordova windows-phone phonegap-plugins

我正在开发PhoneGap Windows Phone 7应用程序上的插件。该插件启动Windows Phone 7 UI上的一个线程,以启动相机扫描QR码。完成执行后,它将返回PhoneGap UI。

问题是,如果用户在执行本机插件代码时按下后退按钮,则应用程序崩溃。

如何覆盖PhoneGap插件的后退按钮,以便我可以返回PhoneGap UI?

1 个答案:

答案 0 :(得分:0)

我已经找到了解决问题的有效方案,但这并不理想。

在执行本机插件代码时按下后退按钮时,将在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,所以我只是删除了来自我的插件代码的声明。