Изменение яркости экрана программно (как и с помощью виджета питания)

Я искал, как изменить яркость экрана программно, и я нашел, что это очень хорошее решение, и оно работает хорошо, но оно работает только во время моего приложения. После завершения моего приложения яркость возвращается обратно к тому же значению, что и до того, как я запустил приложение.

Я хочу изменить яркость так же, как когда я нажимаю кнопку яркости от своего виджета. В виджетах власти, которые поступают от android, есть 3 состояния. Один очень яркий, очень темный и один между ними. Можно ли изменить яркость, как если бы кто-то нажал на этот виджет?

Введите описание изображения здесь

Edit1: Я создал это, и я добавил разрешение на мой манифест, но когда приложение запущено, я не вижу никаких изменений яркости, я пытался с 10 с 100, а теперь с 200, но никаких изменений никаких предложений?

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); } 

Это полный код, который я нашел для работы:

 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)); 

Код из моего вопроса не работает, потому что экран не обновляется. Таким образом, один взлом при обновлении экрана запускает фиктивную активность, а не в создании этой фиктивной активности для вызова finish() поэтому изменения яркости вступают в силу.

Используйте решение Tor-Morten в этой ссылке, но также установите настройку яркости системы следующим образом:

 android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, bright); 

Где bright целое число от 1 до 255.

Сегодня я решил эту проблему.

В качестве первого вы должны ввести разрешение в свой файл AndroidManifest.xml:

 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

Где точное место, чтобы поместить его в файл?

 <manifest> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <application> <activity /> </application> </manifest> 

Это разрешение говорит, что вам разрешено изменять настройки, которые также влияют на другие приложения.

Теперь вы можете включить и выключить автоматический режим яркости

 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) 

Включен или выключен автоматический режим прямо сейчас? Вы можете получить информацию

 int mode = -1; try { mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); //this will return integer (0 or 1) } catch (Exception e) {} 

Итак, если вы хотите изменить яркость вручную, вы должны сначала установить ручной режим, а затем вы можете изменить яркость.

Note: SCREEN_BRIGHTNESS_MODE_AUTOMATIC – 1

Note: SCREEN_BRIGHTNESS_MODE_MANUAL – 0

Вы должны использовать это

 if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) { //Automatic mode } else { //Manual mode } 

вместо этого

 if (mode == 1) { //Automatic mode } else { //Manual mode } 

Теперь вы можете изменить яркость вручную

 Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); //brightness is an integer variable (0-255), but dont use 0 

И яркость чтения

 try { int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //returns integer value 0-255 } catch (Exception e) {} 

Теперь все настроено правильно, но … вы еще не видите изменения. Вам нужно еще одно, чтобы увидеть изменения! Обновите экран … сделайте так:

  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) {} 

Не забудьте разрешение …

 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

Передача контекста активности при настройке параметров также обеспечит выполнение задания без необходимости запуска другого действия. Следующие работали для меня –

 WindowManager.LayoutParams lp = this.getWindow().getAttributes(); lp.screenBrightness =0.00001f;// i needed to dim the display this.getWindow().setAttributes(lp); 

У меня был этот кусок кода внутри метода onSensorChanged (), который затемнял дисплей всякий раз, когда он был запущен.

КОМПЛЕКСНЫЙ ПРИМЕР:

  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) {}