Använda RPi, Azure och Cortana att automatisera ditt hem! (13 / 15 steg)
Steg 13: Skapa din Windows Phone App del 4: kodning Cortana - logik
Cortanas logik
Nu när Cortana kan höra dig, vi behöver henne att förstå dig. Denna del av guiden går in i 'backend' Cortana och para ihop henne med vår app logik. Vi vill programmera henne så att när hon hör ett av dessa kommandon, hon skickar ett meddelande till vår Azure Service Bus och aktiverar eller inaktiverar lamporna.
Installera röstkommandon
Glöm inte! Detta är ett problem som många människor har när du först använder Cortana, helt enkelt eftersom det är lätt förbises. Låt oss göra det genast att se till att det är gjort och över med.
Placera följande kod i dokumentet MainPage.xaml.cs .
Först, importera rätt referens samtal på toppen av din fil:
använder System.Threading.Tasks;
använder Windows.Media.SpeechRecognition;
använder Windows.Storage;
Sedan koden för att installera vår röst kommandon kan skrivas som en funktion som så:
privat async uppgift InstallVoiceCommandsAsync()
{
var storageFile = väntar StorageFile.GetFileFromApplicationUriAsync (nya Uri("ms-appx:///ControlCommands.xml"));
väntar på VoiceCommandManager.InstallCommandSetsFromStorageFileAsync(storageFile);
}
Inte bekant med asynkrona och Await? Läsa på MSDN dokument här.
Nu när vi har vår funktion, låt oss se till att kalla det! En bra plats att lägga den ligger inom funktionen OnNavigatedTo .
Eftersom våra installera är en asynkron uppgift, kommer att vi behöva vända funktionen OnNavigateTo i en asynkron funktion genom enkel att lägga till följande kod:
skyddade omställning async void OnNavigatedTo (NavigationEventArgs e)
Då kolla vi bara att detta är första gången sidan har varit navigerat till och installera våra röstkommandon:
om (e.NavigationMode == NavigationMode.New)
{
väntar på InstallVoiceCommandsAsync();
}
Stor! Nu kommer våra röstkommandon installera så snart så öppna app för första gången!
Voice Command logik
Nu kommer vi använder vad kommandot den användare talade för att räkna ut vilket kommando att skicka till vår Azure Service Bus. Öppna upp din App.xaml.cs fil och bläddra till strax under funktionen RootFrame_FirstNavigated . Vi kommer att sätta följande funktion under där:
skyddade omställning void OnActivated (IActivatedEventArgs args)
{
Base. OnActivated(args);
om (args. Snäll == ActivationKind.VoiceCommand)
{
var commandArgs = args som VoiceCommandActivatedEventArgs;
om (commandArgs! = null)
{
SpeechRecognitionResult speechRecognitionResult = commandArgs.Result;
var voiceCommandName = speechRecognitionResult.RulePath[0];
växel (voiceCommandName)
{
fallet "DeskLightsOff":
SendSBMessage("0");
bryta;
fallet "DeskLightsOn":
SendSBMessage("1");
bryta;
}
}
}
Window.Current.Activate();
}
Denna funktion kallas varje gång någon använder våra Command Prefix (BACH) när du ger Cortana en instruktion. Även om det kan verka lite förvirrande till en början, är den verkliga viktig del följande kodrader:
växel (voiceCommandName)
{
fallet "DeskLightsOff":
SendSBMessage("0");
bryta;
fallet "DeskLightsOn":
SendSBMessage("1");
bryta;
}
Vi använder en strömbrytare uttalande att hoppa genom olika kommandon i vårt SSML dokument. Vad vi checkar är för strängen för att matcha med våra kommandonamnet från våra kommandot block i ssml doc. När vi vet vad kommandot för vi har fått, kan vi sedan agera därefter genom bränning våra SendSBMessage som skickar ett meddelande till vår Azure Service Bus. För "Av" skickar vi en "0"och "På" vi skickar en "1".
Koden inte fungerar 100%? Oroa dig inte, jag har bifogat både en MainPage.xaml.cs och App.xaml.cs som bör ge dig mer klarhet när följer med.