Change the System Brightness Programmatically

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:

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

Leave a Comment