Intercettare l’evento PowerUp di un palmare
Probabilmente chi di voi sviluppa su Windows Mobile 5 o 6 può risolvere questo tipo di problema in modo diverso, magari con il meccanismo State and Notification Broker di cui ha parlato Mighell sull’ultimo numero di IoProgrammo.
Ma con Pocket PC 2003 certe cose non sono possibili. Il mio problema era questo (parlo al passato perchè ormai l’ho risolto): la mattina, quando riaccendevo il palmare dopo averlo spento la sera prima, la mia applicazione era ancora aperta, ma Windows si metteva in primo piano, facendo di fatto scomparire l’applicazione. Nel caso in cui si voglia creare un’applicazione blindata, questo comportamento non va bene. In pratica, si vuole evitare il più possibile che l’utente possa utilizzare l’interfaccia di Windows, fare operazioni non consentite e via dicendo. Per raggiungere questo obiettivo, abbiamo disabilitato gli hardware buttons del palmare (che richiamano le applicazioni standard come il calendario, la posta elettronica, etc.), abbiamo fatto uso di alcune API per spostare la barra Start al di fuori dello schermo e così via.
Rimaneva solo quel problema: capitava a volte, al risveglio del palmare dopo un lungo periodo, che l’applicazione finisse in secondo piano e lo schermo mostrava la schermata iniziale di Windows. Ci sono due soluzioni: o scrivete qualcosa in C++ oppure utilizzate lo OpenNETCF Smart Device Framework 2.1, come ho fatto io, che è disponibile qui.
Con questa libreria la soluzione è molto semplice:
public partial class MainForm : Form { public MainForm() { InitializeComponent(); PowerManagement.PowerUp += new DeviceNotification(PowerManagement_PowerUp); } void PowerManagement_PowerUp() { this.BringToFront(); MessageBox.Show("L'applicazione è stata risvegliata!"); } }
Nel costruttore del form mi sottoscrivo all’evento PowerUp, il cui event handler non fa altro che chiamare il metodo BringToFront() sulla form stessa, che quindi torna davanti a tutto. Piccola note: l’evento viene sollevata più di una volta – non ho ben capito la logica – perciò sconsiglierei di mettere MessageBox.Show() come ho fatto io qui sopra a scopo didattico. E’ bene utilizzare procedure non invasive per l’utente: la BringToFront() è una di queste, perchè se viene eseguita una o due volte ha poca importanza.
Technorati Tags: .NET Framework PocketPC programming