屏幕亮度的知识点
- 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,从事安卓开发,希望一起前行,一起进阶