Risposte:
Un'opzione è utilizzare un blocco scia . Esempio dai documenti:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// screen and CPU will stay awake during this section
wl.release();
C'è anche una tabella in questa pagina che descrive i diversi tipi di wakelock.
Tenere presente che è necessario prestare attenzione quando si utilizzano i blocchi di attivazione. Assicurati di avere sempre release()il lucchetto quando hai finito (o meno in primo piano). Altrimenti la tua app potrebbe potenzialmente causare un serio consumo della batteria e l'utilizzo della CPU.
La documentazione contiene anche una pagina utile che descrive diversi approcci per mantenere sveglio un dispositivo e quando è possibile scegliere di utilizzarne uno. Se "impedisce al dispositivo di andare in modalità di sospensione" si riferisce solo allo schermo (e non mantiene attiva la CPU), probabilmente un blocco di riattivazione è più del necessario.
È inoltre necessario essere sicuri di disporre dell'autorizzazione WAKE_LOCK impostata nel manifest per utilizzare questo metodo.
Se si vuole solo evitare che la modalità di sospensione su una specifica View, basta chiamare setKeepScreenOn(true)su quel Viewo impostare la keepScreenOnproprietà true. Ciò impedirà allo schermo di spegnersi mentre Viewè sullo schermo. Nessun permesso speciale richiesto per questo.
setKeepScreenOn(true)avrà effetto solo quando Viewè visibile.
Ho trovato un'altra soluzione funzionante: aggiungere la seguente riga alla tua app nell'evento onCreate.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Il mio esempio di progetto Cordova è simile al seguente:
package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;
public class ScanManActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
super.loadUrl("http://stackoverflow.com");
}
}
Dopodiché, la mia app non andrebbe a dormire mentre era aperta. Grazie per la risposta va a xSus.
android:keepScreenOn="true" potrebbe essere l'opzione migliore per avere dal layout XML.
Ulteriori informazioni: https://developer.android.com/training/scheduling/wakelock.html
Impostare i flag nella finestra delle attività come di seguito
@Override public void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override public void onPause() {
super.onPause();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
Dalla shell di root (ad esempio shell adb), puoi bloccare con:
echo mylockname >/sys/power/wake_lock
Dopo di che il dispositivo rimarrà sveglio, fino a quando non lo fai:
echo mylockname >/sys/power/wake_unlock
Con la stessa stringa per "mylockname".
Nota che ciò non impedirà allo schermo di diventare nero, ma impedirà alla CPU di dormire.
Nota che / sys / power / wake_lock è read-write per la radio utente (1001) e il sistema di gruppo (1000) e, naturalmente, root.
Un riferimento è qui: http://lwn.net/Articles/479841/
ciò che @eldarerathis ha affermato è corretto sotto tutti gli aspetti, il blocco della sveglia è il modo giusto per impedire al dispositivo di andare a dormire.
Non so che cosa debba fare la tua app, ma è davvero importante pensare a come architetta la tua app in modo da non forzare il telefono a rimanere sveglio per più di quello che ti serve, o la durata della batteria ne risentirà enormemente.
Vorrei indicarti questo ottimo esempio su come utilizzare AlarmManagergli eventi per attivare e riattivare il telefono e (la tua app) per eseguire ciò che devi fare e poi tornare a dormire: Alarm Manager (fonte: commonsware.com)