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

时间:2017-09-08 14:53:56

标签: android screen-brightness

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

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

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

由于

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

是的,有一种使用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)
    
  • AndroidManifest.xml中的权限:

    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    
  • 对于API> = 23,您需要request the permission through Settings Activity

其他有用的链接: