Изменение яркости экрана программно (как с помощью виджета питания)
Я искал, как изменить яркость экрана программно, и я нашел это, это очень хорошее решение, и оно работает хорошо, но оно работает только во время моего приложения активен. После того, как мое приложение отключится, яркость вернется обратно к тому же значению, что и до того, как я запустил приложение.
Я хочу иметь возможность изменять яркость так же, как когда я нажимаю кнопку яркости от своего виджета. В виджетах власти, которые поступают от android, есть 3 состояния. Один очень яркий, очень темный и один между ними. Можно ли изменить яркость, как если бы кто-то нажал на этот виджет?
![enter image description here]()
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);
}
Ответы
Ответ 1
Это полный код, который я нашел для работы:
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()
, чтобы изменения яркости вступили в силу.
Ответ 2
Используйте решение Tor-Morten в этой ссылке, но также установите настройку яркости системы следующим образом:
android.provider.Settings.System.putInt(getContext().getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS, bright);
Где bright
- целое число от 1 до 255.
Ответ 3
Я решил эту проблему сегодня.
В качестве первого вы должны ввести разрешение в свой файл 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) {}
Итак, если вы хотите вручную изменить яркость, вы должны сначала установить ручной режим, а затем вы можете изменить яркость.
Примечание: SCREEN_BRIGHTNESS_MODE_AUTOMATIC - 1
Примечание: 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" />
Ответ 4
Передача контекста активности при настройке параметров также обеспечит выполнение задания без необходимости запуска другого действия.
Следующие работали для меня -
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.screenBrightness =0.00001f;// i needed to dim the display
this.getWindow().setAttributes(lp);
У меня был этот кусок кода внутри метода onSensorChanged(), который затемнял дисплей всякий раз, когда он запускался.
Ответ 5
КОМПЛЕКСНЫЙ ПРИМЕР:
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) {}