2014-12-27 10 views
6

Ich habe derzeit Cortana in meine Silverlight App implementiert. Die Sprachbefehle in CortanaCommands.xml gespeichert sind, hier ist der Code:Wie können Cortana Sprachaktivierungsbefehle (XML) in C# geändert werden?

<?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>" 

In diesem Beispiel, wenn der Benutzer Cortana setzt und sagt, dann ist die App navigiert „Dr. Bailey, wird es regnen zu gehen?“ zum CortanaText.xaml. Dies ist hart in das XML codiert und ich möchte, dass der Benutzer in der Lage ist, sein Befehlspräfix und seinen Befehl anzupassen.

Durch die Verwendung von 2 Textfeldern habe ich in C# eine Zeichenfolge codiert, die das gesamte XML enthält, aber die Auswahlmöglichkeiten aus den Textfeldern einfügt, die das neue Befehlspräfix und Befehl enthalten. Diese Zeichenfolge heißt CortanaXMLstring. Was ist der beste Weg, um den vorhandenen Code in CortanaCommands.xml mit der neuen Zeichenfolge zu überschreiben? Ich dachte, das wäre einfacher als zwei verschiedene Bereiche des bestehenden XML zu ändern. Ich dachte auch, dass es möglich sein könnte, die CortanaCommands.xml (mit C# -Code) zu löschen, und dann dieses XML durch einfaches Einfügen der Zeichenfolge neu zu erstellen, da die Zeichenfolge den gesamten für das XML benötigten Text enthält? Oder gibt es andere Vorschläge, wie diese 2 Felder in der XML-Datei geändert werden können? Es ist das Befehlspräfix und das Befehlsbeispiel. Vielen Dank für Ihre Hilfe!

Antwort

0

Also haben wir das nach einiger Zeit gelöst.

Zuerst luden wir die XML-Datei in isoliertem Speicher geladen und die VCD-Datei aus isolierten Speicher

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

statt

ms-appx:///CortanaCommands.xml verwenden.

die

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

Ist das, was Belastungen aus dem isolierten Speicher-Ordner anstelle von der XAP-Datei.

Dann schrieben wir vollständig die XML-Datei in Code, um die Boxen

<CommandPrefix> und die <ListenFor>

mit Benutzereingaben von den beiden Text zu ersetzen. Wir luden das in einen Strom und verwenden

document.Root.RemoveAll();

die alten XML-Informationen von CortanaCommands.xml zu entfernen und neu geschrieben, den Strom in xml unsere neue Daten verwenden und neu geladen

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

alle tun, die erlaubt für den Benutzer, um benutzerdefinierte Befehl Präfix und Ausdruck hinzuzufügen, um die Seite zu starten, die wir starten wollten. Dies kann verwendet werden, um etwas in der XML-Datei zu ändern und die VCD vollständig zu den Benutzern neu zu schreiben.

Ich sollte erwähnen, dass wir für unsere Zwecke das Phrase-Thema nicht benötigten, da wir nur einen Navigationsbefehl verwendeten. Wir haben diesen Phrasenthema gelöscht, da er ohnehin optional ist, und das [create] {dictation} in listenfor zu "wird es regnen" geändert

Verwandte Themen