2009-05-17 5 views
2

Ich habe eine einfache Windows Mobile-Anwendung, die GPS-Koordinaten alle 5 Minuten aufzeichnet. Das Problem ist, dass die App gut funktioniert, solange der Bildschirm eingeschaltet ist, sobald das Telefon in den Standby-Modus wechselt, funktioniert die App nicht mehr. Wenn ich das Gerät einschalte, fängt die App wieder an zu arbeiten.Halten Sie Windows Mobile App im Standby-Modus

Was kann ich tun, damit die App auch im Standby-Modus funktioniert?

Sandeep

Antwort

4

Blick auf die CeRunAppAtTime Funktion. Übergeben Sie ein benanntes Ereignis und die Zeit, die Sie ausführen möchten. Warten Sie auf das Ereignis in einem Thread. Wenn Sie aufwachen, sollten Sie PowerPolicyNotify anrufen, da das Gerät sonst möglicherweise wieder aussetzt, bevor Sie es beenden.

Der Code würde in etwa so aussehen

CeRunAppAtTime(eventName,now + 5 minutes) 
while(!quit) 
WaitForSingleObject(event,timeout) 
PowerPolicyNotify(PPN_UNATTENDEDMODE,TRUE) 
DoGpsStuff() 
CeRunAppAtTime(eventName,now + 5 minutes) 
PowerPolicyNotify(PPN_UNATTENDEDMODE,FALSE) 
6

mit GPS Meine Erfahrung ist, dass es eine Weile dauert, einen Fix (zumindest auf meinem Gerät) zu bekommen, so dass ich denke, das Telefon zu halten haben aus suspended state die ganze Zeit. Als ich mit meinem Gerät herumspielte, bemerkte ich, dass ich den eingebauten Musik-Player benutzen musste, um eine Reparatur zu bekommen, während der Bildschirm ausgeschaltet war. Wie ratchetr darauf hingewiesen hat, scheint PowerPolicyNotify (PPN_UNATTENDEDMODE, TRUE) der richtige Weg zu sein, um die "music player requirement" zu verhindern.

Edit: Es scheint auch wie Sie müssen SetPowerRequirement/ReleasePowerRequirement auf einigen Geräten verwenden.

Hier ist ein C# Beispiel:

public const int PPN_UNATTENDEDMODE = 0x0003; 
    public const int POWER_NAME = 0x00000001; 
    public const int POWER_FORCE = 0x00001000; 

    [DllImport("coredll.dll")] 
    public static extern bool PowerPolicyNotify(int dwMessage, bool dwData); 

    [DllImport("coredll.dll", SetLastError = true)] 
    public static extern IntPtr SetPowerRequirement(string pvDevice, CedevicePowerStateState deviceState, uint deviceFlags, string pvSystemState, ulong stateFlags); 

    [DllImport("coredll.dll", SetLastError = true)] 
    public static extern int ReleasePowerRequirement(IntPtr hPowerReq); 

    public enum CedevicePowerStateState : int 
    { 
     PwrDeviceUnspecified = -1, 
     D0 = 0, 
     D1, 
     D2, 
     D3, 
     D4, 
    } 

    //Keep the GPS and device alive: 
    PowerPolicyNotify(PPN_UNATTENDEDMODE, true) 
    IntPtr gpsPowerHandle = SetPowerRequirement("gpd0:", CedevicePowerStateState.D0, POWER_NAME | POWER_FORCE, null, 0); 

    //Call before exiting your app: 
    ReleasePowerRequirement(gpsPowerHandle); 
    PowerPolicyNotify(PPN_UNATTENDEDMODE, false); 
+0

die klarste Antwort über das Internet !!! es funktioniert super .. ich merkte, dass es WLAN hält. – GorillaApe

Verwandte Themen