Bloquer une mise en veille

 

FLAG_KEEP_SCREEN_ON

Le flag FLAG_KEEP_SCREEN_ON posé sur un layout permet de ne pas avoir le déclenchement de la mise en veille. L'avantage étant de ne pas avoir à demander une quelconque permission par rapport à la solution WakeLock qui va suivre.

Exemple:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="fr.free.supertos.MainActivity"
android:keepScreenOn="true"

>

Ce flag pourra être positionné par code via setFlags(int flags, int mask):

getWindow().setFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

 

WakeLock

Il peut s'avérer utile de bloquer la mise en veille ou le mode économie d'énergie (écran moins brillant) de votre écran. Pour cela, il vous faudra utiliser la classe WakeLock:

 

Il faut tout d'abord indiquer dans le AndroidManifest.xml la permission pour accéder à cette classe WakeLock:

Sous Eclipse, cliquez sur le fichier AndroidManifest.xml. Vous voyez apparaître le contenu de votre fichier xml (indigeste, normal, c'est du xml...)

Sous cet éditeur, vous trouverez un onglet "Permissions", cliquez dessus, et cliquez sur le bouton "add". Choisir "Uses permission" et dans le champ de saisie qui apparaîtra, choisir (ou taper) : android.permission.WAKE_LOCK

Deux imports seront nécessaire:

import android.os.PowerManager;
import android.os.PowerManager.WakeLock;

Puis définir une variable

WakeLock wakeLock; dans le header.

 

Dans le onCreate de votre activité:

Comme pour tous les services du système, il faudra passer par une instance de contexte pour acquérir le PowerManager.

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

Le premier paramètre indiquera le type de lock que l'on veut obtenir, le second est un simple texte où vous mettrez ce que vous voudrez !
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "Mon Lock");

Image non trouvée !Depuis l'API 17, FULL_WAKE_LOCK est déprécié. Il faudra utiliser l'attribut FLAG_KEEP_SCREEN_ON à la place ou le coder dans votre code.

 

Dans le onPause:

On libère le bloquage par wakeLock.release();

Dans le onResume:

On active le blocage par wakeLock.acquire();

Image non trouvée !Cela va forcement augmenter la consomation de votre batterie, il ne faudra donc faire ceci que si votre activité le nécessite !