2013-04-07 60 views
0

我正在PhoneGap Windows Phone 7应用程序上开发插件。该插件在Windows Phone 7 UI上启动线程以启动相机以扫描QR码。当它完成执行时,它将返回到PhoneGap用户界面。PhoneGap - 如何覆盖后退按钮,同时执行本机代码(Windows Phone 7)

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

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

回答

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的用户界面,这将是这个样子:

var dispatcherOperation = Deployment.Current.Dispatcher.BeginInvoke(() => /* Your method */ 

另外要注意的是,插件代码继续执行按后退按钮后。使用我的代码,如果QR码扫描没有产生结果,它将尝试返回到PhoneGap用户界面,但这会失败,因为后退按钮事件已经返回到PhoneGap用户界面,所以我只是删除了来自我的插件代码的声明。