如何检测 Android 中屏幕亮度是否发生变化?

How to detect if screen brightness has changed in Android?

我搜索了很多,没有找到类似的问题。

我想知道是否有任何方法可以检测移动设备的屏幕亮度何时发生变化。

我已经尝试过在应用程序启动时存储旧值并反复检查使用Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);来比较屏幕亮度的初始值和最终值,这不是一个好的方法。

谢谢

编辑:这个问题表明我已经尝试过使用 Settings.System.SCREEN_BRIGHTNESS 获取当前屏幕值并定期检查屏幕亮度变化的解决方案。我正在寻找一种更有效的方法来执行此类操作。

没有提供检测亮度变化的接收器。

你必须运行一个ServiceThread来自己检查亮度变化。

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

以上代码将为您提供当前系统亮度级别。定期检测亮度并与旧亮度对比

注意:如果系统处于自动亮度模式,您无法获取当前亮度级别。看到这个 answer.

是的,有一种方法可以使用 ContentObserver:

  • 代码:

      // 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)
    

其他有用的链接:

  • what thread is ContentObserver.onChange called on?
  • Change the System Brightness Programmatically