如何在Android中检测屏幕亮度是否已更改?

5

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

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

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

谢谢。

编辑:此问题指出我已经尝试使用Settings.System.SCREEN_BRIGHTNESS获取当前屏幕值并定期检查屏幕亮度更改。我正在寻找一种更有效的方法来执行此操作。


1
可能是在Android中获取首选屏幕亮度的重复问题。 - Michael
1
似乎没有关于屏幕亮度的系统级广播,因此除非您不断轮询,否则无法知道用户何时更改它,我同意这不是最佳实践。加上@Michael刚刚链接的问题,你手头就有一个相当棘手的问题。 - Edson Menegatti
@Michael 在那里讨论的问题建议了我已经尝试过的相同方法,我正在寻找另一种解决方案 :D - Irfan S
2个回答

12

是的,可以通过使用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)

其他有用的链接:


1
谢谢您的方法,但是不需要权限,因为我们获取系统设置,而不是设置它们。 - MagicUnderHood

5

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

您需要运行一个服务线程来自行检查亮度的变化。

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

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

注意:如果系统处于自动亮度模式,则无法获取当前亮度级别。请参阅此 答案


我已经尝试过这种方法(在问题中已经说明),正在寻找更有效的方法来实现。 - Irfan S
1
答案是否定的。没有有效的方法可以做到这一点。请查看我在答案中分享的链接。 - Bhuvanesh BS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接