1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
---
title: Gestion de l'énergie
slug: WebAPI/Power_Management
tags:
- B2G
- Firefox OS
- Non Standard
- Power Management
- WebAPI
translation_of: Archive/B2G_OS/API/Power_Management_API
---
<p>{{ non-standard_header() }}</p>
<p>{{ B2GOnlyHeader2('certified') }}</p>
<h2 id="Résumé">Résumé</h2>
<p>L'API de gestion de l'énergie, propose des outils pour gérer la consommation énergétique de l'appareil.</p>
<h2 id="Gestion_de_l'énergie">Gestion de l'énergie</h2>
<p>L'API : Power Management , permet d'agir directement sur la consommation d'énergie (écran, processeur, etc...).<br>
<span id="result_box" lang="fr"><span class="hps">L'interface principale</span> <span class="hps">pour gérer l'alimentation</span> <span class="hps">est</span> <span class="hps">accessible</span></span><br>
via {{domxref("window.navigator.mozPower","navigator.mozPower")}} qui est une instance de l'interface {{domxref("PowerManager")}}.</p>
<h3 id="Opérations_d'alimentation_de_base"><span class="short_text" id="result_box" lang="fr"><span class="hps">Opérations d'alimentation</span> <span class="hps">de base</span></span></h3>
<p>L'interface {{domxref("PowerManager")}} permet de gérer la consommation énergétique d'un appareil grâce à de simples opérations.</p>
<h4 id="Opérations_globales_d'alimentation">Opérations globales d'alimentation</h4>
<p>Il est possible d'éteindre l'appareil avec la méthode {{domxref("PowerManager.powerOff()","powerOff()")}} ou de le redémarrer via la méthode {{domxref("PowerManager.reboot()","reboot()")}}.</p>
<pre class="brush: js">// Redémarre l'appareil.
navigator.mozPower.reboot();
// Eteint l'appareil.
navigator.mozPower.powerOff();</pre>
<h4 id="Opérations_d'alimentation_de_l'écran"><span class="short_text" id="result_box" lang="fr"><span class="hps">Opérations d'alimentation</span> <span class="hps">de l'écran</span></span></h4>
<p>L'écran peut être éteint ou rallumé avec la propriété {{domxref("PowerManager.screenEnabled","screenEnabled")}} en lecture-écriture.</p>
<p>Mais il est aussi possible d'agir sur l'écran de manière plus précise, en changeant par exemple la luminosité avec la propriété {{domxref("PowerManager.screenBrightness","screenBrightness")}} en lecture-écriture. Cette propriété définit, sur une échelle de 0 à 1, quel est le niveau de luminosité du rétro-éclairage de l'écran (0 étant la luminosité minimale et 1 la luminosité maximale).</p>
<pre class="brush: js">// Il est inutile de changer la luminosité si
// l'écran est éteint.
if (navigator.mozPower.screenEnabled) {
navigator.mozPower.screenBrightness = 0.5;
}</pre>
<h4 id="Opération_sur_la_consommation_du_processeur">Opération sur la consommation du processeur</h4>
<p>Même s'il n'est pas possible d'éteindre directement le processeur, il est cependant possible de <span id="result_box" lang="fr"><span class="hps">dire s'il</span> <span class="hps">peut être arrêté</span> <span class="hps">ou, si</span> <span class="hps">l'écran</span> <span class="hps">est hors tension</span><span>.</span></span> Cela peut être défini avec la propriété : {{domxref("PowerManager.cpuSleepAllowed","cpuSleepAllowed")}}.<br>
Elle détermine si le processeur se mettra en veille une fois que l'écran a été éteint (true) ou si le processeur continuera de fonctionner normalement (false), auquel cas l'appareil ne passera pas en veille.</p>
<h3 id="Opérations_d'alimentation_avancées">Opérations d'alimentation avancées</h3>
<p>L'énergie peut être mieux gérée lorsque l'application en charge de l'énergie est capable de recevoir des informations quant aux besoins énergétiques des applications tierces. La lecture d'une vidéo, par exemple, sera plus agréable si l'écran ne s'éteint pas automatiquement après quelques secondes de lecture.</p>
<h4 id="Inhibiteur_de_mise_en_veille">Inhibiteur de mise en veille</h4>
<p>Toute application peut faire une requête d'inhibition de la mise en veille.<br>
Une requête d'inhibition de mise en veille est une façon d’empêcher l'appareil de mettre en veille ses ressources matérielles (écran, processeur, son etc...). Cette requête peut être appelée grâce à la méthode {{domxref("window.navigator.requestWakeLock","navigator.requestWakeLock()")}} .</p>
<p>L'inhibition de la mise en veille est requise pour des ressources spécifiques qui pourraient être indisponibles pour diverses raisons.<br>
Par exemple, sur un appareil mobile, le gestionnaire d'énergie peut décider d'éteindre l'écran après une période d'inactivité pour économiser de l'énergie.</p>
<p>L'application qui gère une ressource vérifie la disponibilité de la mise en veille de la ressource associée, avant de la désactiver. Une page peut ainsi empêcher que l'économiseur d'écran s'active ou que l'écran s'éteigne.</p>
<p>Par défaut, Firefox OS autorise l'écran, le processeur, le wifi, à se mettre en veille. Néanmoins, toute application peut manipuler une ressource matérielle et définir sa propre politique de mise en veille pour cette ressource. Le gestionnaire de ressource peut décider par exemple d'ignorer la requête d’inhibition de mise en veille de l'écran demandée par des applications en arrière plan.</p>
<pre class="brush: js">var lock = navigator.requestWakeLock('screen');</pre>
<p>La méthode {{domxref("window.navigator.requestWakeLock","requestWakeLock")}} retourne un objet contenant une propriété <code>topic</code> représentant, le nom de la ressource spécifique verrouilée ainsi qu'une methode <code>unlock()</code> qui peut être utiliser pour annuler manuellement l’inhibition. Notons que si l'application est close (réellement close et pas seulement en arrière plan) toutes les inhibitions seront libérées automatiquement.</p>
<h4 id="Gérer_un_inhibiteur_de_mise_en_veille">Gérer un inhibiteur de mise en veille</h4>
<p>Les applications certifiées, sont capables de gérer le blocage de mise en veille et d'être notifiées changements sur l'état de ce verrouillage. Toute application désirant gérer l'énergie doit en fait écouter tout changement de l'état du blocage de veille de l'écran et du processeur. Ceci peut être réalisé à l'aide de la méthode {{domxref("PowerManager.addWakeLockListener()")}}.<br>
Il est également possible d’arrêter d'écouter les requêtes de verrouillage via la méthode {{domxref("PowerManager.removeWakeLockListener()","")}}.</p>
<p>La méthode {{domxref("PowerManager.addWakeLockListener()","addWakeLockListener")}} prends en paramètre une fonction de rappel (<em>callback</em>) acceptant deux paramètres : une première chaine de caractères représentant une ressource à gérer (dans notre cas l'écran, le processeur ou le wifi) et une seconde chaine de caractères représentant l'état du blocage de veille pour la ressoure concernée.</p>
<p>Le verrou de la mise en veille peut avoir trois états :</p>
<dl>
<dt>
<code>unlocked</code></dt>
<dd>
Personne ne détient le verrou pour bloquer la veille de la ressource donnée</dd>
<dt>
<code>locked-foreground</code></dt>
<dd>
Au moins une application détient le verrou et est visible.</dd>
<dt>
<code>locked-background</code></dt>
<dd>
Au moins une application détient le verrou, cependant aucune d'entre elle n'est visible.</dd>
</dl>
<pre class="brush: js">// Utilisé pour garder une trace du
// dernier changement d'état de WakeLock.
var screenTimeout,
// Une référence sur le gestionnaire d'énergie.
power = window.navigator.mozPower,
// Ici l'action pour gérer l'état du WakeLock.
powerAction = {
// Si il n'y a aucun WakeLock, on va suspendre l'appareil.
// * Éteindre l'écran
// * Permettre au processeur de se mettre en veille.
unlocked: function suspendDevice() {
power.cpuSleepAllowed = true;
power.screenEnabled = false;
},
// Si il y a un WakeLock mais les application qui le requièrent
// sont toutes en arrière plan, on éteint juste l'écran.
'locked-background': function shutOffOnlyScreen() {
power.cpuSleepAllowed = false;
power.screenEnabled = false;
},
// En fin s'il n'y a pas d'application active, requérant un WakeLock,
// et bien il n'y a rien à faire!
}
function screenLockListener(topic, state) {
// Si la ressource désignée par le WakeLock n'est pas l'écran ne rien faire.
if ('screen' !== topic) { return; }
// Chaque fois que l'état de WakeLock change,
// on arrête toute opération de gestion d'énergie en cours.
window.clearTimeout(screenTimeout);
// Si il y a une action définie pour l'état donnée.
if (powerAction[state]) {
// On retard l'action de 3s.
screenTimeout = window.setTimeout(powerAction[state], 3000);
}
}
// On s'assure que notre application de gestion de l'énergie écoute,
// tout les changements sur l'état de WakeLock d'une ressource donnée.
power.addWakeLockListener(cpuLockListener);
power.addWakeLockListener(screenLockListener);</pre>
<p> </p>
<h2 id="Specification" name="Specification">Spécification</h2>
<p>Cette API ne fait partie d'aucune spécification actuellement.</p>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li>{{ domxref("window.navigator.mozPower","navigator.mozPower") }}</li>
<li>{{ domxref("PowerManager") }}</li>
<li>{{ domxref("window.navigator.requestWakeLock()","navigator.requestWakeLock()") }}</li>
</ul>
|