2009-06-13 18 views
5

Ho un'applicazione Android (versione 1.5) che deve essere costantemente in esecuzione quando si preme un pulsante. Quindi, quando si preme un Button, vorrei che il telefono rimanga acceso e non voglia che lo schermo o la CPU scadano.Prevenzione dell'applicazione/timeout dello schermo Android

Quando si preme un altro Button, il telefono tornerà alla normalità e il timeout secondo le impostazioni dell'utente.

+0

possibile duplicato di [Force Screen On] (http://stackoverflow.com/questions/2131948/force-screen-on) –

risposta

3

Aggiornamento: Come suggerito da Steve Pomeroy, this potrebbe essere un modo migliore per farlo.


È possibile utilizzare un WakeLock che richiede l'autorizzazione seguente:

<uses-permission android:name="android.permission.WAKE_LOCK" />

Ecco come acquisire e rilasciare un WakeLock:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); 
wl.acquire(); 
// wake locked... 
wl.release(); 

A seconda delle esigenze si potrebbe essere in grado di utilizzare un diverso tipo di WakeLock.

+0

Ho pensato a questa soluzione, ma posso solo rilasciare il blocco della sveglia dove è stato creato localmente , non nel pulsante "Off" che è dove deve essere rilasciato. Idee? – Tom

+2

Crea un servizio. Nel servizio onCreate(), prendi WakeLock, tenuto in un membro dati privato. Nel servizio onDestroy(), rilascia il WakeLock. Nell'attività, quando è necessario mantenere lo schermo/la CPU, chiamare startService(). Qualche tempo dopo, quando non hai più bisogno di schermo/CPU per restare acceso, chiama stopService(). Ora, il WakeLock si terrà finché il servizio è in esecuzione, indipendentemente da cosa succede alla tua attività. Inoltre, il servizio potrebbe anche tenere sotto controllo gli eventi della batteria, in modo da rilasciare il WakeLock in ogni caso una volta che la batteria si scarica. – CommonsWare

+0

continuo a ricevere "wl non può essere risolto" sul metodo .Rilasciare: public class WakeLockService estende servizio { \t @Override \t pubblico IBinder onBind (arg0 Intent) { \t \t // TODO metodo generato automaticamente stub \t \t return null; \t} \t \t public void onCreate() { \t \t PowerManager pm = (PowerManager) getSystemService (Context.POWER_SERVICE); \t \t PowerManager.WakeLock wl = pm.newWakeLock (PowerManager.FULL_WAKE_LOCK, "My Tag"); \t \t wl.acquire(); \t} \t \t pubblico OnDestroy void() { \t \t wl.release(); \t} } – Tom

2

Invece di utilizzare un Wakelock, si dovrebbe considerare la soluzione qui proposta: Force Screen On

E 'molto più facile da usare e non hanno il potenziale di perdere accidentalmente le batterie degli utenti.

+0

Ah molto bello. L'ho aggiunto alla mia risposta. Grazie! –

Problemi correlati