Search code examples
androidscreen-brightness

How to detect if screen brightness has changed in Android?


I have searched extensively and couldn't find a similar question.

I would like to know if there is any way to detect when the screen brightness of a mobile device has been changed.

I have already tried to store the old value when the app starts and repeatedly check usingSettings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS); to compare the initial and final value of screen brightness , which is not a good way of doing so.

Thanks

EDIT: This question states that I have already tried the solution of using Settings.System.SCREEN_BRIGHTNESS to get current screen values and periodically check for screen brightness changes. I am looking for a more efficient way of doing such an operation.


Solution

  • yes, there is a way by using ContentObserver:

    • code:

        // listen to the brightness system settings
        val contentObserver = object:ContentObserver(Handler())
        {
            override fun onChange(selfChange:Boolean)
            {
                // get system brightness level
                val brightnessAmount = Settings.System.getInt(
                        contentResolver,Settings.System.SCREEN_BRIGHTNESS,0)
      
                // do something...
            }
        }
      
        // register the brightness listener upon starting
        contentResolver.registerContentObserver(
                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
                false,contentObserver)
      
        // .....
      
        // unregister the listener when we're done (e.g. activity destroyed)
        contentResolver.unregisterContentObserver(contentObserver)
      

    other useful links: