Je cherchais comment changer la luminosité de l'écran par programme et j'ai trouvé ceci c'est une très bonne solution et cela fonctionne bien, mais cela ne fonctionne que lorsque mon application est active. Après l'arrêt de mon application, la luminosité revient à la même valeur qu'avant de démarrer mon application.
Je veux pouvoir changer la luminosité comme lorsque j'appuie sur le bouton de luminosité de mon widget d'alimentation. Dans le widget d'alimentation qui vient de Android il y a 3 états. Un très lumineux, un très sombre et un entre les deux. Est-il possible de changer la luminosité comme quand quelqu'un appuie sur ce widget?
Edit1: J'ai créé cela et j'ai ajouté la permission à mon manifeste, mais lorsque l'application est lancée, je ne vois aucun changement de luminosité, j'ai essayé avec 10 avec 100 et maintenant avec 200 mais aucun changement aucune suggestion?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Android.provider.Settings.System.putInt(this.getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS, 200);
}
Voici le code complet que j'ai trouvé fonctionner:
Settings.System.putInt(this.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, 20);
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness =0.2f;// 100 / 100.0f;
getWindow().setAttributes(lp);
startActivity(new Intent(this,RefreshScreen.class));
Le code de ma question ne fonctionne pas car l'écran n'est pas actualisé. Donc, un piratage lors de l'actualisation de l'écran démarre une activité factice et ensuite lors de la création de cette activité factice pour appeler finish()
afin que les changements de luminosité prennent effet.
Utilisez la solution de Tor-Morten dans ce lien, mais définissez également le paramètre de luminosité du système comme suit:
Android.provider.Settings.System.putInt(getContext().getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS, bright);
Où bright
est un entier compris entre 1 et 255.
J'ai résolu ce problème aujourd'hui.
En tant que premier, vous devez mettre une autorisation dans votre fichier AndroidManifest.xml:
<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
Où est l'endroit exact pour le mettre dans le fichier?
<manifest>
<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
<application>
<activity />
</application>
</manifest>
Cette autorisation indique que vous êtes autorisé à modifier les paramètres qui affectent également d'autres applications.
Vous pouvez maintenant activer et désactiver le mode automatique de luminosité
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); //this will set the automatic mode on
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off)
Le mode automatique est-il activé ou désactivé actuellement? Vous pouvez obtenir les informations
int mode = -1;
try {
mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); //this will return integer (0 or 1)
} catch (Exception e) {}
Donc, si vous souhaitez modifier la luminosité manuellement, vous devez d'abord définir le mode manuel et ensuite vous pouvez modifier la luminosité.
note: SCREEN_BRIGHTNESS_MODE_AUTOMATIC est 1
note: SCREEN_BRIGHTNESS_MODE_MANUAL vaut 0
Vous devez utiliser ceci
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
//Automatic mode
} else {
//Manual mode
}
au lieu de cela
if (mode == 1) {
//Automatic mode
} else {
//Manual mode
}
Vous pouvez maintenant modifier la luminosité manuellement
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); //brightness is an integer variable (0-255), but dont use 0
et lire la luminosité
try {
int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //returns integer value 0-255
} catch (Exception e) {}
Maintenant, tout est réglé correctement, mais ... vous ne pouvez pas encore voir le changement. Vous avez besoin d'une chose pour voir le changement! Actualisez l'écran ... alors procédez comme suit:
try {
int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //this will get the information you have just set...
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = (float) br / 255; //...and put it here
getWindow().setAttributes(lp);
} catch (Exception e) {}
N'oubliez pas la permission ...
<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
Passer le contexte de l'activité lors de la configuration des paramètres permettrait également de faire le travail sans avoir besoin de démarrer une autre activité. Ce qui suit a fonctionné pour moi-
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.screenBrightness =0.00001f;// i needed to dim the display
this.getWindow().setAttributes(lp);
j'ai eu ce morceau de code à l'intérieur onSensorChanged () méthode qui atténuait l'affichage chaque fois qu'il était déclenché.
EXEMPLE COMPLEXE:
try {
//sets manual mode and brightnes 255
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off)
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); //this will set the brightness to maximum (255)
//refreshes the screen
int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = (float) br / 255;
getWindow().setAttributes(lp);
} catch (Exception e) {}