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

Irf*_*n S 5 android screen-brightness

我已经进行了广泛的搜索,但找不到类似的问题。

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

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

谢谢

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

Eri*_*ric 10

是的,有一种使用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)
    
    Run Code Online (Sandbox Code Playgroud)

其他有用的链接:


Bhu*_* BS 5

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

您必须自己运行服务线程来检查亮度变化。

Settings.System.getInt(getContext().getContentResolver(), 
             Settings.System.SCREEN_BRIGHTNESS);
Run Code Online (Sandbox Code Playgroud)

上面的代码将为您提供当前的系统亮度级别。定期检测亮度并与旧的进行比较。

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