[英]How to detect if screen brightness has changed in Android?
我已经进行了广泛的搜索,但找不到类似的问题。
我想知道是否有任何方法可以检测移动设备的屏幕亮度何时发生变化。
我已经尝试在应用程序启动时存储旧值,并使用Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
反复检查Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
比较屏幕亮度的初始值和最终值,这不是一个好方法。
谢谢
编辑:这个问题表明我已经尝试过使用Settings.System.SCREEN_BRIGHTNESS
来获取当前屏幕值并定期检查屏幕亮度变化的解决方案。 我正在寻找一种更有效的方法来进行此类操作。
是的,有一种使用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 (eg activity destroyed) contentResolver.unregisterContentObserver(contentObserver)
其他有用的链接:
没有提供接收器来检测亮度变化。
您必须自己运行服务或线程来检查亮度变化。
Settings.System.getInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS);
上面的代码将为您提供当前的系统亮度级别。 定期检测亮度并与旧的进行比较。
注意:如果系统处于自动亮度模式,您将无法获得当前亮度级别。 看到这个答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.