2015-01-16 22 views
5

Tôi có một ứng dụng Windows Phone 8.1 Universal mà tôi đang làm việc để thêm hỗ trợ Cortana cơ bản vào. Rất nhiều bài viết về điều này là dành cho Silverlight, vv - Tôi thấy khó tìm được thông tin thực sự tốt về điều này.yêu cầu cortana gây ra sự cố khi khởi động

Cho đến giờ, tôi đã kích hoạt hoạt động nếu ứng dụng đang chạy hoặc bị tạm ngưng. Tuy nhiên, nếu ứng dụng hoàn toàn thoát, sau đó khi kích hoạt, nó sẽ bị treo ngay lập tức. Tôi đã thử sử dụng Hockey và một thói quen "LittleWatson" đơn giản để bắt gặp sự cố, nhưng có vẻ như sẽ xảy ra quá sớm để bị bắt. Tôi đã nhìn thấy một số tài liệu tham khảo để làm một phiên bản beta tư nhân và cố gắng để có được đổ sụp đổ, nhưng tôi đã không có bất kỳ may mắn với điều đó cho đến nay.

Đây là những gì mã kích hoạt của tôi trông như thế nào trong app.xaml.cs:

protected override void OnActivated(IActivatedEventArgs args) { 
     base.OnActivated(args); 
     ReceivedSpeechRecognitionResult = null; 
     if (args.Kind == ActivationKind.VoiceCommand) { 
      var commandArgs = args as VoiceCommandActivatedEventArgs; 
      if (commandArgs != null) { 
       ReceivedSpeechRecognitionResult = commandArgs.Result; 
       var rootFrame = Window.Current.Content as Frame; 
       if (rootFrame != null) { 
        rootFrame.Navigate(typeof(CheckCredentials), null); 
       } 
      } 
     } 
    } 

và đây là séc của tôi cho kết quả lệnh:

private async Task CheckForVoiceCommands() { 
     await Task.Delay(1); // not sure why I need this 
     var speechRecognitionResult = ((App)Application.Current).ReceivedSpeechRecognitionResult; 
     if (speechRecognitionResult == null) { 
      return; 
     } 
     var voiceCommandName = speechRecognitionResult.RulePath[0]; 

     switch (voiceCommandName) { 
      // omitted 
     } 

     ((App)Application.Current).ReceivedSpeechRecognitionResult = null; 
    } 

Tôi khá chắc chắn từ chèn thông điệp vv mà nó thất bại lâu trước khi nó được xa này.

Có thể có điều gì đó dễ dàng tôi thiếu nhưng tôi không biết ...

Điều gì gây ra sự cố sớm như vậy?

EDIT Một điều tôi đã thử là sử dụng cấu hình "gỡ lỗi mà không cần khởi chạy" để cố gắng nắm bắt ngoại lệ. Khi tôi làm điều này, ứng dụng dường như treo vĩnh viễn được kết nối trong trình gỡ lỗi trên màn hình giật gân. Tuy nhiên, điều đó đã khiến tôi buộc phải nghỉ ngơi. Tài khoản bị treo trong số

global::Windows.UI.Xaml.Application.Start((p) => new App()); 

mà tốt nhất tôi có thể nói, chỉ cho tôi biết ứng dụng đang treo ở đâu đó. Đó là dòng duy nhất trong ngăn xếp cuộc gọi.

+0

Bạn đã thử lưu trữ tên lệnh thoại thay vì [SpeechRecognitionResult] thô (http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.media.speechrecognition. speechrecognitionresult.aspx) đối tượng? Tôi nhận thấy đó là một tài nguyên marshalled và tôi nghi ngờ điều này là gây ra ngoại lệ truy cập khi lưu trữ nó trong bộ nhớ. – lsuarez

+0

@lthibodeaux cảm ơn bạn đã đề xuất! Tôi đã thay đổi mã để chỉ vượt qua chuỗi văn bản lệnh mà không thay đổi. –

Trả lời

10

Sao chép phân đoạn của mã OnLaunched thành OnActivated như trong ví dụ bên dưới. OnLaunched không được gọi khi App được kích hoạt và nó thực hiện một số công việc cần thiết như kích hoạt cửa sổ.

protected override void OnActivated(IActivatedEventArgs args) 
{ 
    // When a Voice Command activates the app, this method is going to 
    // be called and OnLaunched is not. Because of that we need similar 
    // code to the code we have in OnLaunched 
    Frame rootFrame = Window.Current.Content as Frame; 
  
    if (rootFrame == null) 
    { 
     rootFrame = new Frame(); 
     rootFrame.CacheSize = 1; 
     Window.Current.Content = rootFrame; 
     rootFrame.Navigate(typeof(MainPage)); 
    } 
  
    Window.Current.Activate(); 
  
    // For VoiceCommand activations, the activation Kind is ActivationKind.VoiceCommand 
    if(args.Kind == ActivationKind.VoiceCommand) 
    { 
     // since we know this is the kind, a cast will work fine 
     VoiceCommandActivatedEventArgs vcArgs = (VoiceCommandActivatedEventArgs)args; 
  
     // The NavigationTarget retrieved here is the value of the Target attribute in the 
     // Voice Command Definition xml Navigate node 
     string target = vcArgs.Result.SemanticInterpretation.Properties["NavigationTarget"][0]; 
+0

điều này đã gần như chính xác những gì tôi cần, vì vậy cảm ơn bạn! Điều này đã giết chết tôi nhiều, nhiều tuần! –

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