J'essaie d'allumer et d'éteindre l'affichage après une action donnée (nous nous inquiétons simplement d'éteindre l'écran pour l'instant). D'après ce que j'ai compris de wake lock, voici ce que j'ai:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
Lorsque je lis d'autres articles sur stackoverflow et ailleurs, ils semblent me dire que PARTIAL_WAKE_LOCK éteindra l'écran. Mais si je lis le Kit de développement logiciel (SDK), il dit qu’il ne permet que d’éteindre l’écran. Donc, je pense que ce n'est pas correct.
Toute allusion serait utile! Merci,
Mike
Il y a deux choix pour éteindre l'écran:
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
// Choice 1
manager.goToSleep(int amountOfTime);
// Choice 2
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
wl.release();
Vous aurez probablement aussi besoin de cette permission:
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
METTRE À JOUR:
Essayez cette méthode. Android éteint l'écran lorsque le niveau de lumière est suffisamment bas.
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Ce qui suit est copié à partir de Document SDK . Si vous souhaitez garder l’écran activé, je pense que SCREEN_BRIGHT_WAKE_LOCK
est suffisant.
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
Pour moi, ces méthodes ne fonctionnaient pas. J'ai donc utilisé un autre scénario (non trivial) pour éteindre mon écran.
Android a 2 drapeaux qui sont responsables pour être éveillé:
J'ai utilisé le flux suivi:
Tout d’abord, sauvegardez votre configuration précédente, par exemple le délai d’écran était de 1 min et restez éveillé pendant la charge cochée.
Ensuite, décochez Rester éveillé pendant la charge et réglez le délai d’affichage de l’écran sur une durée minimale.
Je m'inscris pour diffuser le service du récepteur pour obtenir un événement de cet écran Android désactivé.
Lorsque l’événement est désactivé sur l’écran, j’ai paramétré la configuration précédente par défaut: le délai d’écran était de 1 minute et rester éveillé pendant le chargement coché.
Désinscrire un destinataire
Après 15 secondes l'appareil dort
Voici des extraits de code:
BroadcastReceiver
import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
/**
* Catch Screen On/Off
* */
public class BroadcastReceiverScreenListener extends BroadcastReceiver{
private BroadCastListenerCallBackItf mBroadCastListenerCallBack = null;
public BroadcastReceiverScreenListener(
BroadCastListenerCallBackItf broadCastListenerCallBack) {
this.mBroadCastListenerCallBack = broadCastListenerCallBack;
}
@Override
public void onReceive(Context arg0, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
mBroadCastListenerCallBack.broadCastListenerCallBack__ScreenOff_onResponse();
}
}
}
Interface utilisée comme rappel
public interface BroadCastListenerCallBackItf {
public void broadCastListenerCallBack__ScreenOff_onResponse();
}
2 méthodes de la classe principale:
....
AndroidSynchronize mSync = new AndroidSynchronize();
....
public void turnScreenOff(int wait){
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadCastListenerCallBackItf broadCastListenerCallBack = this;
BroadcastReceiver mReceiver = new BroadcastReceiverScreenListener(broadCastListenerCallBack);
m_context.registerReceiver(mReceiver, filter);
//set Development --> disable STAY_ON_WHILE_PLUGGED_IN
Settings.System.putInt(
m_context.getContentResolver(),
Settings.System.STAY_ON_WHILE_PLUGGED_IN,
0 );
// take current screen off time
int defTimeOut = Settings.System.getInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 3000);
// set 15 sec
Settings.System.putInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 15000);
// wait 200 sec till get response from BroadcastReceiver on Screen Off
mSync.doWait(wait*1000);
// set previous settings
Settings.System.putInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, defTimeOut);
// switch back previous state
Settings.System.putInt(
m_context.getContentResolver(),
Settings.System.STAY_ON_WHILE_PLUGGED_IN,
BatteryManager.BATTERY_PLUGGED_USB);
m_context.unregisterReceiver(mReceiver);
}
public void broadCastListenerCallBack__ScreenOff_onResponse() {
mSync.doNotify();
}
....
Classe AndroidSynchronize
public class AndroidSynchronize {
public void doWait(long l){
synchronized(this){
try {
this.wait(l);
} catch(InterruptedException e) {
}
}
}
public void doNotify() {
synchronized(this) {
this.notify();
}
}
public void doWait() {
synchronized(this){
try {
this.wait();
} catch(InterruptedException e) {
}
}
}
}
[MODIFIER]
Vous devez enregistrer une autorisation:
Android.permission.WRITE_SETTINGS
Par ceci link , vous pouvez aussi éteindre l’écran comme ceci:
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000);
1000 est en millisecondes, ce qui signifie 1 seconde. Vous pouvez le remplacer par toute valeur souhaitée.
Autorisation nécessaire:
<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />