Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 933
Irfan S Avatar asked Sep 08 '17 14:09

Irfan S


2 Answers

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:

  • what thread is ContentObserver.onChange called on?
  • Change the System Brightness Programmatically
like image 55
Eric Avatar answered Oct 22 '22 07:10

Eric


There are no receivers provided to detect brightness change.

You have to run a Service or Thread to check the brightness change by yourself.

Settings.System.getInt(getContext().getContentResolver(), 
             Settings.System.SCREEN_BRIGHTNESS);

The above code will give you current system brightness level. Periodically detect the brightness and compare with the old one.

Note: If the system is in Auto Brightness mode, you can't get current brightness level. See this answer.

like image 40
Bhuvanesh BS Avatar answered Oct 22 '22 06:10

Bhuvanesh BS