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


torsdag den 28. august 2008

Applikationen kører ikke når telefonen er standby

skrevet af Niels Brinch

Titlen på dette indlæg, er et lille faktum man skal vide når man udvikler til mobiltelefoner. Når telefonen går standby, så kører applikationerne på telefonen ikke længere. CPU'en er simpelt hen slukket.

Det havde temmelig stor betydning for hvor godt min Timer-applikation fungerede. Den talte kun ned mens telefonen var i brug. Når jeg ikke brugte den og den gik i standby efter 1 minut, holdt den op med at tælle ned. Når telefonen aktiveres igen, er applikationerne stadig åbne og de er i den tilstand de var i da telefonen gik standby.

Hvad gør man så, hvis man som mig vil have telefonen til at reagere efter et stykke tid som er længere tid end telefonens standby-tid? Det kunne også være kontrol af en GPS-funktion hvert femte minut eller noget helt tredje jeg slet ikke kan forestille mig.

Der er to muligheder:

1. Aktivering via CeRunAppAtTime

Det er muligt at instruere sin telefon i at eksekvere en bestemt applikation på et bestemt tidspunkt, med følgende metode:

[DllImport("coredll")]
internal static extern bool CeRunAppAtTime(string pwszAppName, byte[] lpTime);

Den fungerer ok, men ikke perfekt. På min telefon er den i hvert fald ikke særligt præcis med hvornår den starter. Hvis jeg f.eks. sætter den til at starte om 10 sekunder, starter den bare med det samme. Upraktisk.

Et andet problem med den er, at den ikke kan starte/aktivere en applikation som allerede er startet. Derfor skal man starte en anden applikation, som enten udfører opgaven hurtigt (f.eks. afspiller alarm-lyden) og så lukker igen. Eller man skal lade den applikation der startes, sende en event til den anden applikation som allerede kører og som skal udføre arbejdet.

Alligevel er dette nok den mest fornuftige metode at anvende i de fleste tilfælde. Her er en god implementation:

http://www.rhinomobile.net/2007/03/run-application-at-time-and-time-change.html

2. Sørg for telefonen ikke går standby

Hvis telefonen ikke går standby, kører applikationerne videre hele tiden, alt imens telefonen bruger en masse strøm. Det er simpelt nok og fungerer ret godt at forhindre telefonen i at gå standby. Det gøres med følgende metode:

[DllImport("coredll.dll")]
public static extern void SystemIdleTimerReset();

Den metode skal bare kaldes efter mindre tid end den tid det tager før telefonen går standby. For nemheds skyld kalder jeg den bare hvert sekund.

 

Nyeste version, nu mere energislugende end nogensinde, kan downloades her: www.dotnyt.dk/timer.cab

0 kommentarer

0 Kommentarer:

Send en kommentar

<< Tilbage


 
Til forsiden

Niels Brinch