Je souhaite modifier la luminosité du système par programme. Pour cela, j'utilise ce code:
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = (255);
window.setAttributes(lp);
parce que j'ai entendu que la valeur maximale est de 255.
mais ça ne fait rien. Veuillez suggérer tout ce qui peut changer la luminosité. Merci
Vous pouvez utiliser les éléments suivants:
//Variable to store brightness value
private int brightness;
//Content resolver used as a handle to the system's settings
private ContentResolver cResolver;
//Window object, that will store a reference to the current window
private Window window;
Dans votre écriture onCreate:
//Get the content resolver
cResolver = getContentResolver();
//Get the current window
window = getWindow();
try
{
// To handle the auto
Settings.System.putInt(cResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
//Get the current system brightness
brightness = Settings.System.getInt(cResolver, Settings.System.SCREEN_BRIGHTNESS);
}
catch (SettingNotFoundException e)
{
//Throw an error case it couldn't be retrieved
Log.e("Error", "Cannot access system brightness");
e.printStackTrace();
}
Écrivez le code pour surveiller le changement de luminosité.
vous pouvez alors régler la luminosité mise à jour comme suit:
//Set the system brightness using the brightness variable value
Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness);
//Get the current window attributes
LayoutParams layoutpars = window.getAttributes();
//Set the brightness of this window
layoutpars.screenBrightness = brightness / (float)255;
//Apply attribute changes to this window
window.setAttributes(layoutpars);
Autorisation dans le manifeste:
<uses-permission Android:name="Android.permission.WRITE_SETTINGS"/>
Pour l'API> = 23, vous devez demander l'autorisation via l'activité des paramètres, décrite ici: Impossible d'obtenir l'autorisation WRITE_SETTINGS
J'ai eu le même problème.
Deux solutions:
ici, luminosité = (int) 0 to 100 range
comme j'utilise la barre de progression
1 SOLUTION
float brightness = brightness / (float)255;
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = brightness;
getWindow().setAttributes(lp);
2 SOLUTION
Je viens d'utiliser une activité factice pour appeler lorsque ma barre de progression stop
cherche.
Intent intent = new Intent(getBaseContext(), DummyBrightnessActivity.class);
Log.d("brightend", String.valueOf(brightness / (float)255));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //this is important
//in the next line 'brightness' should be a float number between 0.0 and 1.0
intent.putExtra("brightness value", brightness / (float)255);
getApplication().startActivity(intent);
Nous arrivons maintenant au DummyBrightnessActivity.class
public class DummyBrightnessActivity extends Activity{
private static final int DELAYED_MESSAGE = 1;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == DELAYED_MESSAGE) {
DummyBrightnessActivity.this.finish();
}
super.handleMessage(msg);
}
};
Intent brightnessIntent = this.getIntent();
float brightness = brightnessIntent.getFloatExtra("brightness value", 0);
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = brightness;
getWindow().setAttributes(lp);
Message message = handler.obtainMessage(DELAYED_MESSAGE);
//this next line is very important, you need to finish your activity with slight delay
handler.sendMessageDelayed(message,200);
}
}
n'oubliez pas d'enregistrer DummyBrightnessActivity pour vous manifester.
j'espère que ça aide!!
J'ai essayé plusieurs solutions que d'autres ont publiées et aucune d'entre elles ne fonctionnait parfaitement. La réponse de geet est fondamentalement correcte mais contient quelques erreurs syntaxiques. J'ai créé et utilisé la fonction suivante dans mon application et cela a très bien fonctionné. Notez que cela modifie spécifiquement la luminosité du système comme demandé dans la question d'origine.
public void setBrightness(int brightness){
//constrain the value of brightness
if(brightness < 0)
brightness = 0;
else if(brightness > 255)
brightness = 255;
ContentResolver cResolver = this.getApplicationContext().getContentResolver();
Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness);
}
WindowManager.LayoutParams layout = getWindow().getAttributes();
layout.screenBrightness = 1F;
getWindow().setAttributes(layout);
cela a fonctionné pour moi jusqu'à KitKat 4.4 mais pas dans Android L
private void stopBrightness() {
Settings.System.putInt(this.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, 0);
}
Ceci est le code complet sur la façon de modifier la luminosité du système
private SeekBar brightbar;
//Variable to store brightness value
private int brightness;
//Content resolver used as a handle to the system's settings
private ContentResolver Conresolver;
//Window object, that will store a reference to the current window
private Window window;
/** Called when the activity is first created. */
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Instantiate seekbar object
brightbar = (SeekBar) findViewById(R.id.ChangeBright);
//Get the content resolver
Conresolver = getContentResolver();
//Get the current window
window = getWindow();
brightbar.setMax(255);
brightbar.setKeyProgressIncrement(1);
try {
brightness = System.getInt(Conresolver, System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException e) {
Log.e("Error", "Cannot access system brightness");
e.printStackTrace();
}
brightbar.setProgress(brightness);
brightbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
System.putInt(Conresolver, System.SCREEN_BRIGHTNESS, brightness);
LayoutParams layoutpars = window.getAttributes();
layoutpars.screenBrightness = brightness / (float) 255;
window.setAttributes(layoutpars);
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress <= 20) {
brightness = 20;
} else {
brightness = progress;
}
}
});
}
Ou vous pouvez vérifier cela tutoriel pour le code complet
codage heureux :)
<uses-permission Android:name="Android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
Android.provider.Settings.System.putInt(getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS,
progress);
private SeekBar Brighness = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lcd_screen_setting);
initUI();
setBrightness();
}
private void setBrightness() {
Brighness.setMax(255);
float curBrightnessValue = 0;
try {
curBrightnessValue = Android.provider.Settings.System.getInt(
getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
int screen_brightness = (int) curBrightnessValue;
Brighness.setProgress(screen_brightness);
Brighness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progress = 0;
@Override
public void onProgressChanged(SeekBar seekBar, int progresValue,
boolean fromUser) {
progress = progresValue;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// Do something here,
// if you want to do anything at the start of
// touching the seekbar
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Android.provider.Settings.System.putInt(getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS,
progress);
}
});
}
initUI(){
Brighness = (SeekBar) findViewById(R.id.brightnessbar);
}
Ajoutez ceci dans le manifeste
<uses-permission Android:name="Android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions"/>
WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 10; // range from 0 - 255 as per docs
getWindow().setAttributes(params);
getWindow().addFlags(WindowManager.LayoutParams.FLAGS_CHANGED);
Cela a fonctionné pour moi. Pas besoin d'une activité factice. Cela ne fonctionne que pour votre activité actuelle.
Vous devez créer la variable:
windowManager.LayoutParams mParams privé;
puis remplacez cette méthode (pour enregistrer vos paramètres précédents):
@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
mParams = params;
super.onWindowAttributesChanged(params);
}
que là où vous souhaitez modifier la luminosité de l'écran (sur l'application), utilisez simplement:
mParams.screenBrightness = 0.01f; //use a value between 0.01f for low brightness and 1f for high brightness
getWindow().setAttributes(mParams);
testé sur la version 28 de l'API.
S'il vous plaît Essayez ceci, c'est peut vous aider. A bien fonctionné pour moi
Selon mon expérience
1st method.
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 75 / 100.0f;
getWindow().setAttributes(lp);
où la valeur de luminosité très conforme à 1.0f.100f est la luminosité maximale.
Le code mentionné ci-dessus augmentera la luminosité de la fenêtre actuelle. Si nous voulons augmenter la luminosité de l'ensemble de l'appareil Android, ce code ne suffit pas, pour cela, nous devons utiliser
2nd method.
Android.provider.Settings.System.putInt(getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS, 192);
Où 192 est la valeur de luminosité qui va de 1 à 255. Le principal problème de l'utilisation de la 2ème méthode est qu'elle affichera la luminosité sous une forme accrue dans le périphérique Android mais en fait, elle ne pourra pas augmenter la luminosité du périphérique Android C'est parce qu'il a besoin d'un rafraîchissement.
C'est pourquoi je trouve la solution en utilisant les deux codes ensemble.
if(arg2==1)
{
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 75 / 100.0f;
getWindow().setAttributes(lp);
Android.provider.Settings.System.putInt(getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS, 192);
}
Ça a bien marché pour moi