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?

139
demandé sur prolink007 2010-09-16 08:06:56

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.

125
répondu eldarerathis 2015-07-13 14:50:36

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.

209
répondu Witek 2012-10-04 19:59:43

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.

104
répondu dogatonic 2012-08-01 21:36:47

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

20
répondu CoDe 2014-09-24 06:59:05

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);
}
8
répondu arjun 2017-02-09 17:58:23

À 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/

4
répondu jelle foks 2013-09-23 20:58:04

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)

3
répondu lucabox 2010-09-16 10:45:00