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.
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:
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With