5

Tôi có một Ứng dụng Cửa hàng Windows tạo ra một ô thứ cấp. Khi gạch được nhấp, tôi muốn ứng dụng thực hiện, chức năng off-line có hiệu quả là gì, nghĩa là tôi không muốn quay lại ứng dụng nhưng muốn ứng dụng thực hiện điều gì đó và sau đó thoát ra. Vì vậy, trong trường hợp này tôi muốn khởi chạy ứng dụng e-mail, cho exampe. Đây là nơi tôi cho đến nay:Ứng dụng Cửa hàng Windows - Thực hiện một tác vụ duy nhất khi khởi chạy từ một ô thứ cấp

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. 
     } 
... 

Email chức năng ở đây:

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); 
    } 

Các lỗi Tôi hiện được là "đối tượng đã bị ngắt kết nối từ khách hàng của mình" - mà tôi giả định là do chương trình thoát trước lời hứa hoàn thành. Làm thế nào loại hành vi này có thể đạt được trong WInRT?

UPDATE:

Tôi đã có thông tin phản hồi từ MS về vấn đề này, và phản ứng của họ nếu đó là có hay không này là có thể, nó chắc chắn là không được hỗ trợ vì thoát ứng dụng programatically vi phạm yêu cầu cấp giấy chứng nhận 3.6.

+0

Vì vậy, bạn đang tìm cách * chỉ * khởi chạy ứng dụng email, đúng không? Chức năng Email của bạn trông như thế nào? – GotDibbs

+0

Đúng vậy. Tôi đã chỉnh sửa câu hỏi của tôi để bao gồm nó. –

Trả lời

2

Nó không có vẻ rằng Gạch Secondary được dự định để khởi động các ứng dụng của bên thứ ba:

gạch Secondary phép người dùng quảng bá nội dung cụ thể và liên kết sâu — tham chiếu đến một vị trí cụ thể bên trong ứng dụng ghim — từ ứng dụng ứng dụng Windows Store [sic] lên màn hình Bắt đầu.

Nguồn: http://msdn.microsoft.com/en-us/library/windows/apps/hh465372.aspx

Tôi đã thử một số cách để khắc phục sự cố của bạn mặc dù và có vẻ là một vấn đề thời gian chơi ở đây. Khi không gỡ lỗi, mã trên của bạn (có hoặc không có hàm Hết hạn lời hứa gọi là then hoặc done) không thành công mỗi lần đối với tôi, cho dù bạn đặt mã của mình trong sự kiện đã sẵn sàng, đã tải hoặc kích hoạt.

Trong thử nghiệm của tôi tuy nhiên, tôi đã có thể có được điều này để làm việc mà không có lỗi bằng cách gói chức năng khởi động của bạn trong một vài cách khác nhau:

  1. Với một thời gian chờ sử dụng setTimeout với một thời gian chờ của bất cứ điều gì trên 1 giây
  2. với một tin nhắn Dialog sử dụng Windows.UI.Popups.MessageDialog

Cả hai trong số đó kết thúc bằng lời hứa hoàn thành callback của bạn, với một cuộc gọi đến window.close(); để thoát khỏi ứng dụng.

Ví dụ sử dụng Eight.js cho các tuyến đường thông điệp: (dường như là giải pháp có sẵn sạch nhất, nhưng rõ ràng là không thực hiện sự ra mắt trong nền và không phải là người sử dụng nhất thân thiện):

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

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

Note : Tôi nghĩ rằng một trong hai giải pháp là hacky, và tôi chắc chắn bạn sẽ đồng ý. Không ai thực sự khởi chạy ở chế độ nền. Tôi không thể tìm thấy bất kỳ tài liệu nào ở bất kỳ đâu để hỗ trợ việc có thể thực hiện việc này mà không cần khởi chạy ứng dụng của bạn. Đối với tôi điều này có vẻ như một lỗi và tôi sẽ cố gắng mở một sự cố hỗ trợ kỹ thuật cho một giải pháp sạch hơn nếu bạn có thể. Nếu không, bạn có thể thử số Windows Store Apps forums nơi một số người Microsoft thực sự sống.

+0

Tôi đã nêu câu hỏi này trên diễn đàn MS –

+0

Tôi thấy rằng :) ... các MSFT thực sự đã khá nhanh trong diễn đàn đó để phản hồi câu hỏi chưa được trả lời. Hy vọng rằng bạn sẽ có câu trả lời chính thức ngay. – GotDibbs

+0

Xem cập nhật của tôi - dường như có một lý do khiến việc này không thể thực hiện được một cách rõ ràng. –

0

Vâng, bạn có thể sử dụng then() của launchUriAsync() để xử lý các ứng dụng:

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

Nhưng mã nào sẽ đi vào // Thoát khỏi ứng dụng? –

+0

window.close() cập nhật câu trả lời. –

+0

Vẫn cho cùng một lỗi mà đối tượng đã bị ngắt kết nối khỏi máy khách –

Các vấn đề liên quan