Android屏幕亮度

本篇文章主要介绍下android 屏幕亮度相关的内容.

1: 申请权限

修改屏幕亮度需要申请WRITE_SETTINGS权限

<uses-permissionandroid:name="android.permission.WRITE_SETTINGS"tools:ignore="ProtectedPermissions"/>

WRITE_SETTINGS权限无法通过动态申请的方式来申请.

比如demo中我们单独只申请android.permission.WRITE_SETTINGS权限.

打开demo的应用信息,可以看到应用权限中提示的是 未申请任何权限

那如何来申请权限呢?

我们可以通过跳转相关页面进行手动设置:

startActivity(newIntent(Settings.ACTION_MANAGE_WRITE_SETTINGS))

2: 判断权限是否申请.

上面我们只是跳转了权限设置的页面,那么如何判断是否已经设置成功呢?

这里用到系统的方法:

Settings.System.canWrite(this);

我们添加下判断方法:

@RequiresApi(api =Build.VERSION_CODES.M)privatebooleanisCanWrite(){
   
   returnSettings.System.canWrite(this);}

3:判断是否自动亮度

接着我们关注下屏幕亮度下的自动亮度功能.

首先我们可以根据屏幕亮度mode这个字段来判断:

/**
 * Control whether to enable automatic brightness mode.
 */publicstaticfinalStringSCREEN_BRIGHTNESS_MODE="screen_brightness_mode";

mode有:

/**
 * SCREEN_BRIGHTNESS_MODE value for manual mode.
 */publicstaticfinalintSCREEN_BRIGHTNESS_MODE_MANUAL=0;/**
 * SCREEN_BRIGHTNESS_MODE value for automatic mode.
 */publicstaticfinalintSCREEN_BRIGHTNESS_MODE_AUTOMATIC=1;

通过调用Settings.System.getInt()方法获取屏幕亮度模式,如果返回值为Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC,则表示开启了自动亮度调节,具体的代码如下:

/**
 * SCREEN_BRIGHTNESS_MODE判断是否设置自动亮度
 * @return
 */privatebooleanisAutoScreenBrightness(){
   
   try{
   
   int mode =Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE);return mode ==Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;}catch(Settings.SettingNotFoundException e){
   
   
        e.printStackTrace();}returnfalse;}

4: 关闭打开自动亮度

关闭打开自动亮度的开关也很简单,就是修改SCREEN_BRIGHTNESS_MODE的值即可,代码如下:

  1. 开启自动亮度

    privatevoidopenAutoScreenBrightness(){
         
         Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);}
  2. 关闭自动亮度

    privatevoidcloseAutoScreenBrightness(){
         
         Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);}