系统屏幕亮度调节

本部分代码地址:https://github.com/loveyoyo/SimpleDemo/blob/master/app/src/main/java/com/kang/demo/hardware/ScreenBrightnessActivity.java

屏幕亮度的知识点
  • Android系统的屏幕亮度取值范围是0-255,数据是int型;
  • 屏幕亮度的模式有两种,如下:
字段解释
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL手动调节模式0
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC自动调节模式1

设置屏幕亮度的常见方法如下

  • 获取当前屏幕亮度:获取到的是0-255范围内的值;
private int getCurrentScreenBrightness(Context context) {
    int currentBrightness = 0;
    ContentResolver contentResolver = context.getContentResolver();
    try {
        currentBrightness = Settings.System.getInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS);
    } catch (Settings.SettingNotFoundException e) {
        e.printStackTrace();
    }
    return currentBrightness;
}
  • 获取当前屏幕亮度模式:返回值是0(手动调节模式)或者1(自动调节模式);
private int getCurrentScreenBrightnessMode(Context context) {
    int screenBrightnessMode = 0;
    ContentResolver contentResolver = context.getContentResolver();
    try {
        screenBrightnessMode = Settings.System.getInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE);
    } catch (Settings.SettingNotFoundException e) {
        e.printStackTrace();
    }
    return screenBrightnessMode;
}
  • 设置屏幕调节模式:需要先获取android.permission.WRITE_SETTINGS这个权限,然后才能设置屏幕调节模式,否则会报错:was not granted this permission: android.permission.WRITE_SETTINGS。0-手动调节模式,1-自动调节模式;
//清单文件中申请权限;
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

//6.0以后需要动态申请系统的权限;
private void requestPermission(int mode) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (!Settings.System.canWrite(this)) {
            Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
            intent.setData(Uri.parse("package:" + this.getPackageName()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            this.startActivity(intent);
        } else {
            //有了权限,具体的操作;
            setScreenMode(this, mode);
        }
    }
}
    
//具体的操作屏幕亮度;
private void setScreenMode(Context context, int mode) {
    ContentResolver contentResolver = getContentResolver();
    Settings.System.putInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
}
  • 设置当前页面的屏幕亮度,但是并不会影响系统的屏幕亮度,也就是说设置了当前页面的屏幕亮度,系统的屏幕亮度还是先前的数值,需要申请权限android.permission.CHANGE_CONFIGURATION,否则不会执行调节屏幕亮度;
清单文件中申请权限;
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />

private void setCurrentBrightness(Activity activity, int brightness) {
    WindowManager.LayoutParams layoutParams = activity.getWindow().getAttributes();
    layoutParams.screenBrightness = Float.valueOf(brightness) * (1f / 255f);
    activity.getWindow().setAttributes(layoutParams);
}
  • 设置系统的屏幕亮度,直接影响系统的屏幕亮度。和设置亮度模式一样,需要先获取android.permission.WRITE_SETTINGS这个权限,然后才能设置屏幕调节模式,否则会报错:was not granted this permission: android.permission.WRITE_SETTINGS。;
//还是需要在6.0以上的手机上申请android.permission.WRITE_SETTINGS权限;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!Settings.System.canWrite(this)) {
        Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
        intent.setData(Uri.parse("package:" + this.getPackageName()));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        this.startActivity(intent);
    } else {
        //有了权限,具体的操作;
        setSystemBrightness(this,200);
    }
}
//具体设置系统的屏幕亮度;                
private void setSystemBrightness(Context context,int brightness){
    ContentResolver contentResolver = context.getContentResolver();
    Uri uri = android.provider.Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
    android.provider.Settings.System.putInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS,brightness);
    contentResolver.notifyChange(uri,null);
}                
个人微信联系方式:Kang_01123,从事安卓开发,希望一起前行,一起进阶
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值