2014-12-27 4 views
6

В настоящее время у меня Cortana реализована в моем приложении Silverlight. Голосовые команды сохраняются в CortanaCommands.xml, вот код:Как изменить команды Cortana Voice Activation (XML) на 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>" 

В этом примере, если пользователь разворачивает Кортанен и говорит, то приложение переходит «Доктор Бейли, он собирается дождь?» к CortanaText.xaml. Это жестко закодировано в XML, и я хочу, чтобы пользователь мог настроить свой командный префикс и свою команду.

Используя 2 текстовых поля, я закодировал в C# строку, содержащую весь XML, но вставляя варианты из текстовых полей, содержащих новый префикс Command и Command. Эта строка называется cortanaXMLstring. Каков наилучший способ перезаписать существующий код в CortanaCommands.xml с помощью новой строки? Я решил, что это будет проще, чем изменение 2 различных областей существующего XML. Я также подумал, что можно удалить CortanaCommands.xml (используя код C#), а затем создать этот XML снова, просто вставив строку, поскольку строка содержит весь текст, необходимый для XML? Или есть ли какие-либо другие предложения о том, как получить эти 2 поля в XML-файле? Это командный префикс и пример команды. Спасибо за любую помощь, которая может быть предоставлена!

ответ

0

Итак, мы решили это через некоторое время.

Во-первых, мы загрузили XML-файл в изолированном хранилище и загрузили файл VCD из изолированного хранилища с использованием

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

вместо

ms-appx:///CortanaCommands.xml.

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

ли какие грузы из изолированной папки Storage вместо из файла XAP.

Тогда мы полностью переписали файл XML в коде заменить

<CommandPrefix> и <ListenFor>

с пользовательским вводом из двух текстовых полей. Мы нагрузили, что в поток и использовать

document.Root.RemoveAll();

удалить старую информацию XML из CortanaCommands.xml и переписал поток в XML, используя наши новые данные и перезагружается

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

Делая все, что позволяет для пользователя добавить пользовательский префикс команды и фразу для запуска страницы, которую мы хотели запустить. Это можно использовать для изменения чего-либо в файле xml и полностью переписать VCD для пользователей.

Следует упомянуть, что для наших целей нам не нужна фраза, поскольку мы использовали только одну команду навигации. Мы удалили эту тему фразы, поскольку она является факультативной в любом случае, и изменили [create] {dictation} в listenfor на «будет ли дождь»