从Toast通知启动时,WP8.1 WinJS应用程序崩溃

时间:2015-09-25 06:29:27

标签: windows-phone-8.1 winjs toast crash

我正在使用WinJS开发WP8.1应用程序。我正在使用推送通知。我想根据推送通知有效负载中收到的“启动”字符串执行逻辑。我的Toast通知有效负载是

<toast launch='launchString'>
   <visual>
      <binding template='ToastText02'>
         <text id='1'>headlineText</text>
         <text id='2'>bodyText</text>
      </binding>
   </visual>
</toast>

我已经注册了一个活动

WinJS.Application.addEventListener("activated", this.onActivated);

定义为

onActivated: function (args) {

  if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
      if (args.detail.arguments) {
          var launchString = args.detail.arguments;
          eval("angular.element(document.getElementById('mainBody')).scope().onNotification(launchString)")

      }
      else {
          console.log("Not launched from toast notification")
      }
  }
}

这里onNotification(launchString)函数具有基于launchString做出一些决策的逻辑。

当应用程序处于前台或在后台运行时,一切正常。但是当应用程序处于被杀死状态时,我尝试通过点击Toast通知来启动,应用程序在启动后立即崩溃。我无法在VS中对此进行调试,因为我无法在调试时重新创建此方案(因为调试器在调试应用程序被终止时退出)。

  1. 我有什么方法可以调试处于被杀死状态的应用程序吗?
  2. 当应用程序处于被杀死状态时,当我尝试启动并读取“启动”参数时会出现什么问题?我该如何解决这个问题?
  3. 感谢您的帮助!

    编辑: Here是一个类似的问题。

1 个答案:

答案 0 :(得分:0)

好的,所以我得到了答案。

onActivated事件在cordova deviceready被解雇之前被解雇了。因此,我的代码甚至在加载angular.js之前就调用了角度。因此,当它在前景或后台时,应用程序工作正常,因为angular.js已经加载。为了解决这个问题,我使用了超时并检查angularobject

onActivated: function (args) {

  if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
      if (args.detail.arguments) {
          var launchString = args.detail.arguments;

          window.setTimeout(function () {
              if(typeof angular !== undefined)
              eval("angular.element(document.getElementById('mainBody')).scope().onNotificationWindows(launchString)");
          }, 3000);

      }
      else {
          console.log("Not launched from toast notification")
      }
  }

}