Réponses:
Une option consiste à utiliser un verrou de réveil . Exemple tiré de la documentation:
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();
Il y a aussi un tableau sur cette page qui décrit les différents types de wakelocks.
Sachez que certaines précautions doivent être prises lors de l'utilisation des verrous de réveil. Assurez-vous de toujours release()verrouiller lorsque vous en avez terminé (ou pas au premier plan). Sinon, votre application peut potentiellement provoquer une grave décharge de la batterie et une utilisation du processeur.
La documentation contient également une page utile qui décrit différentes approches pour garder un appareil éveillé, et quand vous pouvez choisir d'en utiliser une. Si «empêcher l'appareil de se mettre en veille» se réfère uniquement à l' écran (et ne pas maintenir le processeur actif), alors un verrouillage de réveil est probablement plus que ce dont vous avez besoin.
Vous devez également vous assurer que l' autorisation WAKE_LOCK est définie dans votre manifeste pour utiliser cette méthode.
Si vous souhaitez simplement empêcher le mode veille sur un élément spécifique View, appelez- setKeepScreenOn(true)le simplement Viewou définissez la keepScreenOnpropriété sur true. Cela empêchera l'écran de s'éteindre tant que le Viewest à l'écran. Aucune autorisation spéciale requise pour cela.
setKeepScreenOn(true)ne prendra effet que lorsqu'il Viewest visible.
J'ai trouvé une autre solution de travail: ajoutez la ligne suivante à votre application sous l'événement onCreate.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Mon exemple de projet Cordova ressemble à ceci:
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");
}
}
Après cela, mon application ne s'endormit plus tant qu'elle était ouverte. Merci pour la réponse à xSus.
android:keepScreenOn="true" pourrait être une meilleure option à avoir à partir du format XML.
Plus d'informations: https://developer.android.com/training/scheduling/wakelock.html
Définissez des indicateurs sur la fenêtre d'activité comme ci-dessous
@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);
}
Depuis le shell racine (par exemple le shell adb), vous pouvez verrouiller avec:
echo mylockname >/sys/power/wake_lock
Après quoi, l'appareil restera éveillé jusqu'à ce que vous:
echo mylockname >/sys/power/wake_unlock
Avec la même chaîne pour 'mylockname'.
Notez que cela n'empêchera pas l'écran de devenir noir, mais cela empêchera le processeur de dormir.
Notez que / sys / power / wake_lock est en lecture-écriture pour la radio utilisateur (1001) et le système de groupe (1000), et, bien sûr, root.
Une référence est ici: http://lwn.net/Articles/479841/
ce que @eldarerathis a dit est correct dans tous les aspects, le verrouillage de réveil est le bon moyen d'empêcher l'appareil de s'endormir.
Je ne sais pas ce que votre application doit faire, mais il est vraiment important que vous réfléchissiez à la façon dont votre application doit être conçue pour ne pas forcer le téléphone à rester éveillé pendant plus que ce dont vous avez besoin, sinon la durée de vie de la batterie en souffrira énormément.
Je vous indiquerais ce très bon exemple sur la façon d'utiliser AlarmManagerpour déclencher des événements et réveiller le téléphone et (votre application) pour effectuer ce que vous devez faire, puis vous rendormir : Alarm Manager (source: commonsware.com)