干货总结,Android亮度调整有一下一些知识点需要注意:
1、Android亮度调整,包括调整系统亮度和调整指定Activity亮度。
2、Android系统亮度模式有两种,自动模式和手动模式。
3、自动模式下和手动模式下获取系统亮度值的方式不一样,具体请看代码(谢谢老大指点,差点以为没办法获取自动模式下的亮度)。
4、系统亮度值的区间为[0, 255]。需要注意的是,自动亮度模式下,直接获取到的系统亮度值区间为[-1,1]。
5、这一点可能很多人没注意,调整过Activity亮度之后,系统亮度调整在当前Activity中会失效。
6、系统亮度变化值,可以通过监听系统属性值变化获得,具体看代码。
7、Android 6.0 及以上系统,对系统变量相关操作,需要硬编码动态申请权限。
8、动态监听系统亮度变化,注意防止内存泄露。
好了,干货,请看代码,看代码,看代码
一、工具类BrightnessUtils
public class BrightnessUtils { private static final String TAG = BrightnessUtils.class.getSimpleName(); /** * 判断是否开启了自动亮度调节 */ public static boolean isAutoBrightness(Activity activity) { boolean automicBrightness = false; try { automicBrightness = Settings.System.getInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; } catch (Settings.SettingNotFoundException e){ e.printStackTrace(); } return automicBrightness; } /** * 获取屏幕的亮度 */ public static int getScreenBrightness(Activity activity) { // int nowBrightnessValue = 0; // ContentResolver resolver = activity.getContentResolver(); // try { // nowBrightnessValue = android.provider.Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS); // } catch (Exception e) { // e.printStackTrace(); // } // return nowBrightnessValue; if(isAutoBrightness(activity)){ return getAutoScreenBrightness(activity); }else{ return getManualScreenBrightness(activity); } } /** * 获取手动模式下的屏幕亮度 */ public static int getManualScreenBrightness(Activity activity) { int nowBrightnessValue = 0; ContentResolver resolver = activity.getContentResolver(); try { nowBrightnessValue = android.provider.Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS); } catch (Exception e) { e.printStackTrace(); } return nowBrightnessValue; } /**