Java 以编程方式更改系统亮度

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18312609/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 00:24:11  来源:igfitidea点击:

Change the System Brightness Programmatically

javaandroidbrightnessscreen-brightness

提问by Usman Riaz

I want to change the system brightness programmatically. For that purpose I am using this code:

我想以编程方式更改系统亮度。为此,我正在使用此代码:

WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = (255);
window.setAttributes(lp);

because I heard that max value is 255.

因为我听说最大值是 255。

but it does nothing. Please suggest any thing that can change the brightness. Thanks

但它什么也不做。请建议任何可以改变亮度的东西。谢谢

采纳答案by Ritesh Gune

You can use following :

您可以使用以下内容:

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

In your onCreate write:

在你的 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();
            }

Write the code to monitor the change in brightness.

编写代码来监控亮度的变化。

then you can set the updated brightness as follows:

然后你可以设置更新的亮度如下:

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

Permission in manifest:

清单中的权限:

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

For API >= 23, you need to request the permission through Settings Activity, described here: Can't get WRITE_SETTINGS permission

对于 API >= 23,需要通过 Settings Activity 请求权限,这里描述: Can't get WRITE_SETTINGS permission

回答by Amit Prajapati

Reference link

参考链接

  WindowManager.LayoutParams layout = getWindow().getAttributes();
 layout.screenBrightness = 1F;
  getWindow().setAttributes(layout);     

回答by Bhoomika Brahmbhatt

I had the same problem.

我有同样的问题。

Two solutions:

两种解决方案:

here, brightness =(int) 0 to 100 rangeas i am using progressbar

在这里,亮度 =(int) 0 to 100 range因为我正在使用进度条

1 SOLUTION

1 解决方案

float brightness = brightness / (float)255;
WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = brightness;
        getWindow().setAttributes(lp);

2 SOLUTION

2 解决方案

I just used dummy activity to call when my progress bar stopseeking.

当我的进度条stop搜索时,我只是使用虚拟活动来调用。

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

Now coming to the DummyBrightnessActivity.class

现在来到 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); 
}

}

don't forget to register DummyBrightnessActivity to manifest.

不要忘记注册 DummyBrightnessActivity 来显示。

hope it helps!!

希望能帮助到你!!

回答by Ann

Please Try this , it's May help you. Worked fine for me

请试试这个,它可能会帮助你。对我来说很好用

According to my experience

根据我的经验

 1st method.
                     WindowManager.LayoutParams lp = getWindow().getAttributes();  
                 lp.screenBrightness = 75 / 100.0f;  
                 getWindow().setAttributes(lp);

where the brightness value very according to 1.0f.100f is maximum brightness.

其中根据 1.0f.100f 的亮度值是最大亮度。

The above mentioned code will increase the brightness of the current window. If we want to increase the brightness of the entire android device this code is not enough, for that we need to use

上面提到的代码会增加当前窗口的亮度。如果我们想增加整个 android 设备的亮度,这个代码是不够的,为此我们需要使用

   2nd method.



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

Where 192 is the brightness value which very from 1 to 255. The main problem of using 2nd method is it will show the brightness in increased form in android device but actually it will fail to increase android device brightness.This is because it need some refreshing.

其中192是亮度值,从1到255。使用第二种方法的主要问题是它会在android设备中以增加的形式显示亮度,但实际上它不会增加android设备的亮度。这是因为它需要一些刷新.

That is why I find out the solution by using both codes together.

这就是为什么我通过同时使用这两个代码来找到解决方案的原因。

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


                    }

It worked properly for me

它适合我

回答by user3092247

I tried several solutions that others posted and none of them worked exactly right. The answer from geet is basically correct but has some syntactic errors. I created and used the following function in my application and it worked great. Note this specifically changes the system brightness as asked in the original question.

我尝试了其他人发布的几种解决方案,但没有一个完全正确。geet 的回答基本上是正确的,但有一些语法错误。我在我的应用程序中创建并使用了以下函数,效果很好。请注意,这会按照原始问题中的要求专门更改系统亮度。

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

}

回答by user3475052

this worked for me till kitkat 4.4 but not in android L

这对我有用,直到 kitkat 4.4 但不适用于 android L

private void stopBrightness() {
    Settings.System.putInt(this.getContentResolver(),
            Settings.System.SCREEN_BRIGHTNESS, 0);
}

回答by dondondon

This is the complete code on how to change system brightness

这是有关如何更改系统亮度的完整代码

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

Or you may check this tutorialfor complete code
happy coding:)

或者您可以查看本教程以获取完整的代码
快乐编码:)

回答by arshad shaikh

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

Add this in manifest

在清单中添加这个

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

回答by prago

WindowManager.LayoutParams params = getWindow().getAttributes();
    params.screenBrightness = 10; // range from 0 - 255 as per docs
    getWindow().setAttributes(params);
    getWindow().addFlags(WindowManager.LayoutParams.FLAGS_CHANGED);

This worked for me. No need of a dummy activity. This works only for your current activity.

这对我有用。不需要虚拟活动。这仅适用于您当前的活动。

回答by Mian Taimoor Tahir

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

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