2014-12-27 17 views
6

Aktualnie mam Cortan zaimplementowaną w mojej aplikacji Silverlight. Polecenia głosowe są zapisywane w CortanaCommands.xml, oto kod:Jak zmodyfikować polecenia Cortana Voice Activation (XML) w języku C#?

<?xml version="1.0" encoding="utf-8"?> 

<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1"> 
<CommandSet xml:lang="en-US"> 
<CommandPrefix>Dr. Bailey</CommandPrefix> 
<Example> Open app to take dictation </Example> 

<Command Name="Text"> 
    <Example> Is it going to rain? </Example> 
    <ListenFor> [create] {dictation} </ListenFor> 
    <Feedback> "" </Feedback> 
    <Navigate Target="/Views/CortanaText.xaml" /> 
</Command> 

<PhraseTopic Label="dictation" Scenario="Dictation"> 
    <Subject> Cal 123 </Subject> 
</PhraseTopic> 
</CommandSet> 
</VoiceCommands>" 

W tym przykładzie, jeśli użytkownik instaluje Cortana i mówi, wówczas aplikacja nawiguje „Dr Bailey, to będzie padać?” do CortanaText.xaml. Jest to zakodowane na stałe w XML i chcę, aby użytkownik mógł dostosować swój Prefiks Komend i ich Komendę.

Korzystając z 2 pól tekstowych, zakodowałem w C# łańcuch, który zawiera cały kod XML, ale wstawiając wybory z pól tekstowych zawierających nowy przedrostek polecenia i polecenie. Ten ciąg nazywa się cortanaXMLstring. Jaki jest najlepszy sposób nadpisania istniejącego kodu w CortanaCommands.xml nowym ciągiem? Pomyślałem, że będzie to łatwiejsze niż modyfikowanie 2 różnych obszarów istniejącego XML. Pomyślałem także, że może być możliwe usunięcie CortanaCommands.xml (przy użyciu kodu C#), a następnie utworzenie tego XML po raz kolejny, po prostu wstawiając ciąg, ponieważ ciąg zawiera cały tekst potrzebny do XML? Czy są jakieś inne sugestie, jak zmodyfikować te 2 pola w XML? Jest to przedrostek polecenia i przykład polecenia. Dziękuję za pomoc, którą można udzielić!

Odpowiedz

0

Rozwiązaliśmy to po pewnym czasie.

Najpierw załadowany plik XML do izolowanych Przechowywanie i załadowany plik VCD z izolowanym przechowywania używając

await VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri("ms-appdata:///local/CortanaCommands.xml", UriKind.RelativeOrAbsolute)); 

zamiast

ms-appx:///CortanaCommands.xml.

"ms-appdata:///local/CortanaCommands.xml"

jest co ładunki z izolowanego folderu Storage zamiast z pliku XAP.

Potem całkowicie przepisał plik xml w kodzie zastępując

<CommandPrefix> i <ListenFor>

z wejścia użytkownika z dwóch pól tekstowych. My załadowaliśmy że do strumienia i używane

document.Root.RemoveAll();

usunięcie starych informacji xml z CortanaCommands.xml i przepisał strumień do xml za pomocą naszych nowych danych i przeładował

VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri("ms-appdata:///local/CortanaCommands.xml", UriKind.RelativeOrAbsolute)); 

Robi wszystko, co pozwala aby użytkownik mógł dodać niestandardowy przedrostek polecenia i frazę, aby uruchomić stronę, którą chcieliśmy uruchomić. To może być użyte do zmiany czegokolwiek w pliku xml i całkowitego przepisania VCD na upodobania użytkowników.

Powinienem wspomnieć, że dla naszych celów nie potrzebowaliśmy tematu frazy, ponieważ używaliśmy tylko jednego polecenia nawigacyjnego. Usunęliśmy ten temat frazowy, ponieważ i tak jest on opcjonalny i zmieniliśmy [create] {dyktando} w listenfor na "czy to będzie padało"