Can't apply system screen brightness programmatically in Android

后端 未结 4 2043
闹比i
闹比i 2020-11-28 11:24

I\'m using the following to set the system auto brightness mode and level:

    android.provider.Settings.System.putInt(y.getContentResolver(),Settings.System         


        
相关标签:
4条回答
  • 2020-11-28 11:55

    Use the answer given by "user496854" above
    If you are taking max screenBrightness =255 then while doing

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

    divide screenBrightness by 255 like

    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = brightness/(float)255;   
    getWindow().setAttributes(lp);
    
    0 讨论(0)
  • 2020-11-28 12:01

    OK, found the answer here: Refreshing the display from a widget?

    Basically, have to make a transparent activity that processes the brightness change. What's not mentioned in the post is that you have to do:

    Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
    Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, brightnessLevel); 
    

    then do

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

    And if you call finish() right after applying the changes, brightness will never actually change because the layout has to be created before the brightness settings is applied. So I ended up creating a thread that had a 300ms delay, then called finish().

    0 讨论(0)
  • 2020-11-28 12:04

    I created a static method in my Application class which I invoke from all my Activity.onResume() methods.

    MyApplication extends Application {
        ...
        public static void setBrightness(final Activity context) {
            // get the content resolver
            final ContentResolver cResolver = context.getContentResolver();
            // get the current window
            final Window window = context.getWindow();
    
            try {
                // get the current system brightness
                int brightnessLevel = System.getInt(cResolver,System.SCREEN_BRIGHTNESS);
                // get the current window attributes
                LayoutParams layoutpars = window.getAttributes();
                // set the brightness of this window
                layoutpars.screenBrightness = brightnessLevel / (float) 255;
                // apply attribute changes to this window
                window.setAttributes(layoutpars);
            } catch (SettingNotFoundException e) {
                // throw an error cuz System.SCREEN_BRIGHTNESS couldn't be retrieved
                Log.e("Error", "Cannot access system brightness");
                e.printStackTrace();
            }
        }
    }
    
    MyActivity extends Activity {
        ...
        public void onResume() {
            super.onResume();
            Log.d(TAG, "onResume()");
            MyApplication.setBrightness(this);
        }
    }
    
    0 讨论(0)
  • 2020-11-28 12:11

    I'm doing something similar with screen brightness in one of my apps, and I'm doing it through the WindowManager and it works. I'm using the following code to get the current screen brightness (and save it for later) and set it to full:

        WindowManager.LayoutParams lp = getWindow().getAttributes();
        previousScreenBrightness = lp.screenBrightness;
        float brightness = 1;
        lp.screenBrightness = brightness; 
        getWindow().setAttributes(lp); 
    
    0 讨论(0)
提交回复
热议问题