Comment puis-je empêcher un appareil Android d'aller dormir par programme?
Comment puis-je empêcher un appareil Android d'aller dormir par programme?
7 réponses
Une option consiste à utiliser un Wake lock. Exemple des documents:
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.
Soyez conscient que certaines précautions doivent être prises lors de l'utilisation des verrous de réveil. Assurez-vous que vous avez toujours release()
Le verrou lorsque vous en avez terminé avec lui (ou pas au premier plan). Sinon, votre application peut potentiellement causer une grave vidange de la batterie et L'utilisation du processeur.
La documentation contient également utile page {[4] } qui décrit différentes approches pour garder un appareil éveillé, et quand vous pouvez choisir d'en utiliser un. Si "empêcher le périphérique d'aller en veille" ne fait référence qu'à l'écran (et ne pas garder le processeur actif), un verrouillage de réveil est probablement plus que nécessaire.
Vous devez également être sûr que vous avez l'autorisation WAKE_LOCK définie dans votre manifeste afin d'utiliser cette méthode.
Si vous voulez juste pour éviter le mode veille sur un View
, il suffit d'appeler setKeepScreenOn(true)
sur que View
ou définir la keepScreenOn
propriété true
. Cela empêchera l'écran de s'éteindre lorsque le View
est à l'écran. Aucune autorisation spéciale requise pour cela.
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 serait pas aller dormir alors qu'il était ouvert. Merci pour l'anwer va à xSus.
android:keepScreenOn="true"
pourrait être une meilleure option pour avoir de la mise en page XML.
Plus d'infos: https://developer.android.com/training/scheduling/wakelock.html
Définissez les indicateurs sur la fenêtre de L'activité comme suit
@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);
}
À partir du 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 le fassiez:
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 user radio (1001) et group system (1000), et, bien sûr, root.
Une référence est ici: http://lwn.net/Articles/479841/
Ce que @ eldarerathis dit est correct dans tous les aspects, le verrouillage de réveil est la bonne façon de garder l'appareil d'aller dormir.
Je ne sais pas si votre application doit faire, mais il est vraiment important que vous réfléchissiez à la façon dont votre application est conçue pour ne pas forcer le téléphone à rester éveillé pour plus que vous avez besoin, ou la durée de vie de la batterie en souffrira énormément.
Je tiens à souligner ce vraiment bon exemple sur la façon d'utiliser AlarmManager
pour déclencher des événements et de se réveiller le téléphone et (votre application) pour effectuer ce que vous devez faire et ensuite aller dormir à nouveau: Gestionnaire D'alarme (source: commonsware.com)