Android 2.2: настройка яркости экрана
public void SetBright(float value)
{
Window mywindow = getWindow();
WindowManager.LayoutParams lp = mywindow.getAttributes();
lp.screenBrightness = value;
mywindow.setAttributes(lp);
}
Я хочу настроить яркость экрана. Но ничего не происходит, когда я пытаюсь использовать этот метод. Может ли это быть потому, что я использую флаг KEEP_SCREEN_ON?
3 ответа
Убедитесь, что "Автояркость" не включена перед настройкой яркости экрана. Это можно сделать вручную в меню "Настройки"> "Дисплей" или с помощью кода, если вы используете Android 2.2 или более позднюю версию SDK.
Что-то вроде:
int brightnessMode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.screenBrightness = 0.5F; // set 50% brightness
getWindow().setAttributes(layoutParams);
Убедитесь, что значение находится в диапазоне от 0,0F до 1,0F. Значение -1.0F использует яркость по умолчанию, сохраненную в настройках. В документации "Значение по умолчанию меньше 0 означает использование предпочтительной яркости экрана. От 0 до 1 регулирует яркость от темной до полной яркости".
Отрегулируйте яркость с помощью панели поиска:
открытый класс AndroidBrightnessActivity расширяет Activity {
private SeekBar brightbar;
private int brightness;
private ContentResolver cResolver;
private Window window;
TextView txtPerc;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
brightbar = (SeekBar) findViewById(R.id.brightbar);
txtPerc = (TextView) findViewById(R.id.txtPercentage);
cResolver = getContentResolver();
window = getWindow();
brightbar.setMax(255);
brightbar.setKeyProgressIncrement(1);
try
{
brightness = System.getInt(cResolver, 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(cResolver,System.SCREEN_BRIGHTNESS,brightness);
LayoutParams layoutpars = window.getAttributes();
layoutpars.screenBrightness = brightness / (float)255;
window.setAttributes(layoutpars);
}
public void onStartTrackingTouch(SeekBar seekBar)
{
//Nothing handled here
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
if(progress<=20)
{
brightness=20;
}
else
{
brightness = progress;
}
float perc = (brightness /(float)255)*100;
txtPerc.setText((int)perc +" %");
}
});
}
}
Удачного кодирования...
Значение screenBrightness между 0.0f
а также 1.0f
, может быть, ваша ценность слишком велика. Я использую WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
флаг, а также можно настроить яркость экрана