Android 2.2:调整屏幕亮度

Posted

技术标签:

【中文标题】Android 2.2:调整屏幕亮度【英文标题】:Android 2.2: Adjusting screen brightness 【发布时间】:2011-01-07 00:37:32 【问题描述】:
    public void SetBright(float value) 

    Window mywindow = getWindow();

    WindowManager.LayoutParams lp = mywindow.getAttributes();

            lp.screenBrightness = value;

            mywindow.setAttributes(lp);

我想调整屏幕亮度。但是当我尝试使用这种方法时没有任何反应。难道是因为我使用了 KEEP_SCREEN_ON 标志?

【问题讨论】:

【参考方案1】:

确保在设置屏幕亮度之前未启用“自动亮度”。如果您使用的是 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 将亮度从暗调整为全亮。”

【讨论】:

请注意,当您将其粘贴到您的 IDE 并抱怨“Settings.system ...”时,请确保您的项目设置为至少使用 android v 2.3.3,否则不会编译:) 即使启用了“自动亮度”,使用 WindowManager.LayoutParams 设置屏幕亮度也有效。如文档中所述,“screenBrightness 可用于覆盖用户首选的屏幕亮度”。在 Android 4.1 和 4.4 上测试。 @Adam Thomas 你能告诉我我正在应用值 0.5F,但它在 0.1,0.2 工作时不起作用,而在值 0.5 中它仍然将值设置为 0.2,这意味着 20% 只是提醒一下,更改 android 设置需要 android.permission.WRITE_SETTINGS【参考方案2】:

screenBrightness 的值在0.0f1.0f 之间,可能你的值太大了。 我使用WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON标志,也可以调整屏幕亮度

【讨论】:

【参考方案3】:

使用搜索栏调整亮度:

公共类 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 +" %");
        
    );   

快乐编码...

【讨论】:

以上是关于Android 2.2:调整屏幕亮度的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 调整主屏幕亮度

windows屏幕亮度调整

检测屏幕亮度调整是不是设置为自动

有没有办法以编程方式调整屏幕亮度?

笔记本电脑亮度无法调整

如何使用注册表在Win10中调整屏幕亮度