5

我有一個Windows應用商店應用程序可創建輔助瓷磚。當點擊圖塊時,我希望應用程序能夠執行什麼是有效的離線功能(也就是說,我不想回到應用程序中,但希望應用程序執行某些操作然後退出)。因此,在這種情況下,我想要啓動電子郵件客戶端進行檢查。這裏就是我至今:Windows Store應用程序 - 從輔助瓷磚啓動時執行單個任務

app.addEventListener("activated", function (args) { 
    if (args.detail.kind === activation.ActivationKind.launch) { 

     if (args.detail.arguments !== "") { 
      // Activation arguments are present that 
      // were declared when the secondary tile was pinned to Start. 
      args.setPromise(WinJS.UI.processAll().done(function() { 
       var emailaddress = args.detail.arguments; 
       var promise = Email.SendNewMail.sendEmail(emailaddress); 
       //promise.complete(); 
       return; 
      })); 

     } else if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { 
      // TODO: This application has been newly launched. Initialize 
      // your application here. 
     } else { 
      // TODO: This application has been reactivated from suspension. 
      // Restore application state here. 
     } 
... 

電子郵件功能在這裏:

sendEmail: function sendEmail(addess, subject, body) { 
     var mailto = new Windows.Foundation.Uri("mailto:?to=" + addess + "&subject=" + subject + "&body=" + body); 
     return Windows.System.Launcher.launchUriAsync(mailto); 
    } 

我目前得到的是「對象已經與其客戶端斷開連接」的錯誤 - 我假設由之前退出的程序所引起承諾完成。 WInRT中如何實現這種行爲?

UPDATE:

我對這個有意見來自MS的,如果這一點,是否是可能的,它肯定是不支持的,因爲退出一個應用程序及其響應編程違反認證要求3.6。

+0

因此,您只需*啓動電子郵件應用程序,正確?你的電子郵件功能是什麼樣的? – GotDibbs

+0

這是正確的。我編輯了我的問題以包含它。 –

回答

2

這似乎並不爲二次瓷磚旨在推出第三方應用程序:

二次磚啓用用戶可以將特定內容和深層鏈接(Windows應用商店應用程序應用程序[原文如此]中的引用到固定應用程序內的特定位置)引導至「開始」屏幕。

來源:http://msdn.microsoft.com/en-us/library/windows/apps/hh465372.aspx

我已經嘗試了多種方法來糾正你的問題,但並沒有好像是在玩一個時機的問題在這裏。不調試時,無論您是否將代碼放入就緒,已加載或激活的事件,上面的代碼(帶有或不帶有Promise完成函數調用,如thendone)都會每次都失敗。

在我的測試然而,我能夠通過包裝的發射功能在幾個不同的方式來得到這個工作沒有錯誤

  1. 隨着使用setTimeout與任何超時超時上述1秒
  2. 隨着消息對話框使用Windows.UI.Popups.MessageDialog

這兩者在你的承諾完成回調結束的,具有通話退出應用程序。

使用Eight.js的消息路由實例:(似乎最乾淨可用的解決方案,但顯然在後臺不進行發射,而不是最用戶友好的):

Eight.Message.confirmAsync("Send the email?", function (doSend) { 
    if (!doSend) return; 

    Email.SendNewEmail.sendEmail(emailaddress).done(function (e) { 
     window.close(); 
    }); 
}); 

注:我認爲這兩種解決方案都是hacky,我相信你會同意。兩人都沒有在後臺發佈。我無法在任何地方找到任何文檔來支持在不啓動應用程序的情況下執行此操作。對我來說,這看起來像一個錯誤,如果可以的話,我會嘗試打開一個技術支持事件以獲得更清潔的解決方案。如果不是的話,你可以試試Windows Store Apps forums,那裏有一些真正的微軟人在這裏居住。

+0

我已經提出這個問題在MS論壇 –

+0

我看到:) ... MSFT的傢伙其實已經很快在該論壇迴應未解答的問題。希望你很快就能得到正式的答覆。 – GotDibbs

+0

看到我的更新 - 顯然有一個原因不能幹淨地完成。 –

0

那麼你可以使用launchUriAsync()then()處置程序:

Email.SendNewMail.sendEmail(emailaddress).then(function (success) { 
    if (success) { 
     window.close() 
    } else { 
     // Display error message 
    } 
}); 
+0

但是代碼會去//退出應用程序? –

+0

window.close()更新答案。 –

+0

仍給出了同樣的錯誤,該對象已從客戶端斷開 –

相關問題