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");
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();
Cela
va forcement augmenter la consomation de votre batterie, il ne faudra donc faire
ceci que si votre activité le nécessite !