Søg på DotNyt:
Denne blog er flyttet til www.nielsbrinch.com


torsdag den 14. august 2008

Timer til Windows Mobile

skrevet af Niels Brinch

Klokken er nu 16:55.

Jeg købte ny telefon for en måneds tid siden. En HTC Touch Diamond med Windows Mobile 6.1 installeret. Den er måske en smule langsom, men har ellers givet mig det som jeg havde forventet af den. Den er let at bruge, internet fungerer, synkronisering med Exchange fungerer - og man kan ringe med den. Ikke dårligt.

...men der er ingen timer. Jeg finder stadig min gamle telefon frem når jeg skal lave mad for det er meget lettere at tage tid på den, end det er på min nye fine HTC Touch Diamond. Jeg har netop sat kylling i ovnen og ærgrer mig over det tog næsten lige så lang tid at sætte alarm på min telefon, som det tager at ovnstege kyllingen.

Derfor har jeg tænkt mig at kode en applikation til min telefon som skal gøre det let at tage tid. Jeg skulle gerne nå at blive færdig med at skrive dette indlæg og kode applikationen, inden kyllingen er færdig. Dertil kommer jeg aldrig har kodet til Windows Mobile og jeg gør det på min bærbare inde fra sengen. Det bliver en udfordring :)

Jeg starter med at oprette et nyt projekt i Visual Studio 2008. Et Smart Device projekt. Det første jeg ser efter at have oprettet projektet, er en brugergrænseflade som vises i et billede af en telefon. Et tryk på F5 og jeg får min lille ikke-eksisterende applikation vist i en emulator.

image

Jeg har trukket en NumericUpDown ind i brugergrænsefladen til at angive tiden. Jeg har lavet en ComboBox hvor man kan angive enheden, sekunder, minutter eller timer ... og så har jeg indsat en Label som skal indeholde den tid der er tilbage.

Derudover har jeg indsat en Timer hvor jeg har sat Interval til 1000 millisekunder. Det skulle gerne betyde der kører en event hvert sekund, så jeg kan opdatere hvor lang tid der er tilbage.

image

I bunden har jeg ganske enkelt trykket og skrevet Start og Stop, hvilket giver mig de to fine vagmuligheder. Med et dobbeltklik på Start, kommer jeg ind i metoden, hvor jeg hurtigt skriver det der skal til for at oprette et TimeSpan ud  fra de valgte tider og så kører jeg timer.Enabled = true, så min event starter. Jeg satser på eventen fra timeren virkelig kører en gang i sekundet og tæller altså bare mit TimeSpan ned med et sekund hvert sekund. Men hvis eventen kører sjældnere, vil det tage længere tid end angivet før der nås 0.

image

SelectedText viste sig ikke at være det rigtige, så jeg lavede et hurtigt workaround og brugte SelectedIndex i stedet for. Det der tager længst tid er faktisk at afprøve ændringer i emulatoren. Hver gang der anvendes F5 til at prøve programmet, skal programmet installeres i emulatoren, hvilket tager 1½ minut eller lignende, på min ellers ret hurtigere computer.

Efter 3-4 rekompileringer og dum ventetid, lykkedes det at få den til at reagere korrekt. Følgende er den kode jeg har anvendt i min timers event som køres hvert sekund. Det fungerer.

image

Men det eneste der sker når den har nået 0 er, at timeren stopper. Det skal den selvfølgelig, men den skulle også helst spille en lyd så jeg ikke behøver holde øje med timeren hele tiden.

Efter en Google-søgning kom jeg frem til der findes en SoundPlayer-klasse til .NET 3.5 som kan bruges. For at kunne afspille en lyd skal wav-filen indlæses i SoundPlayer-klassen. Enten fra filsystemet eller hukommelsen. Men hvordan gør jeg det på en telefon? Kan jeg antage der ligger en lydfil et bestemt sted? Eller skal jeg til at lave en funktion så brugeren selv skal vælge hvilken lyd der bruges. Det ville selvfølgelig være fint, men tiden går! Under en halv time tilbage til kyllingen er færdig.

Det er for dumt at hardkode stien til en lyd, så jeg ændrer min "Stop"-knap til en "Vælg lyd"-knap. Jeg indsætter en "OpenFileDialog" i mit vindue og i klik-eventen på "Vælg lyd"-knappen, skriver jeg følgende:

image

Det ser ud til at virke, men der er ikke nogle lyde at vælge på emulatoren, så jeg kan ikke umiddelbart finde ud af det. Jeg ville midlertidigt hardkode en sti til en fil som jeg ved ligger direkte i Windows-mappen på telefonen, men det ser umiddelbart ikke ud til at være muligt at tilgå filer fra applikationen som ligger i Windows-mappen. Jeg må vente med at teste til jeg får installeret min applikation på min telefon.

Til mit Tick-event fra før, tilføjer jeg den handling, at den fil som er indlæst, skal afspilles. Play, hedder metoden:

image

Nu skulle applikationen gerne virke. Jeg når ikke at finde ud af hvordan man installere på min telefon - der findes en projekttype som vist gør det muligt at lave en cab-fil, som er lige til at flytte til telefonen og installere fra.

Jeg når heller ikke at finpudse detaljer. F.eks. skulle det gerne gemmes fra gang til gang hvilken lyd man har valgt skal afspilles.

Men faktum er, at jeg fik udviklet en applikation til min telefon på næsten ingen tid. Jeg supplerer senere med et indlæg som forklarer hvordan installationen klares og som også afslører om det virkelig passer at applikationen virker i sin nuværende form, kun en time efter jeg gik i gang med både at udvikle og skrive dette indlæg.

Klokken er nu 17:53

0 kommentarer

0 Kommentarer:

Send en kommentar

<< Tilbage


 
Til forsiden

Niels Brinch