Android 修改屏幕亮度方案

共 10790字,需浏览 22分钟

 ·

2020-11-27 14:51

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、获取系统Settings 中的亮度
二、修改APP界面屏幕亮度,不会影响其他APP
三、修改系统Settings 中屏幕亮度,影响所有APP
四、完整代码实现

一、获取系统Settings 中的亮度

系统屏幕亮度值在(0~255)之间,获取方法很简单,只需要调用以下方法即可。

/**

* 1.获取系统默认屏幕亮度值 屏幕亮度值范围(0-255)
* **/

private int getScreenBrightness(Context context) {
ContentResolver contentResolver = context.getContentResolver();
int defVal = 125;
return Settings.System.getInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS, defVal);
}

修改屏幕亮度包含两种:
1.修改APP界面屏幕亮度,不会影响其他APP
2.修改系统 Settings 中屏幕亮度,影响所有APP.

二,修改APP界面屏幕亮度,不会影响其他APP

修改自身 APP 亮度很简单,只需要在Activity OnCreate方法调用如下代码即可。

/**
* 2.设置 APP界面屏幕亮度值方法
* **/

* 2.设置 APP界面屏幕亮度值方法
* **/

private void setAppScreenBrightness(int birghtessValue) {
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = birghtessValue / 255.0f;
window.setAttributes(lp);
}

三、修改系统Settings 中屏幕亮度,影响所有APP

修改系统 Settings 中的屏幕亮度,由于会影响到所有APP,需要申请修改Settings的权限 ,同时需要取消光感自动调节屏幕亮度的功能,设置为手动调节模式,否则光感传感器会随着光照强度的变化修改系统屏幕亮度,并且非系统签名的APP,需要用户手动授权后才可以修改背光亮度。

关闭光感,设置手动调节背光模式实现方法如下:

/**
* 3.关闭光感,设置手动调节背光模式
*
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节屏幕亮度模式值为1
*
* SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节屏幕亮度模式值为0
* **/

* 3.关闭光感,设置手动调节背光模式
*
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节屏幕亮度模式值为1
*
* SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节屏幕亮度模式值为0
* **/

public void setScreenManualMode(Context context) {
ContentResolver contentResolver = context.getContentResolver();
try {
int mode = Settings.System.getInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE);
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
Settings.System.putInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
}
非系统签名应用,引导用户手动授权修改Settings 权限

非系统签名应用,无法直接修改Settings,需要引导用户手动授权。

引导用户手动授权

    /**
* 4.非系统签名应用,引导用户手动授权修改Settings 权限
* **/

private static final int REQUEST_CODE_WRITE_SETTINGS = 1000;

private void allowModifySettings() {
// Settings.System.canWrite(MainActivity.this)
// 检测是否拥有写入系统 Settings 的权限
if (!Settings.System.canWrite(MainActivity.this)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this,
android.R.style.Theme_Material_Light_Dialog_Alert);
builder.setTitle("请开启修改屏幕亮度权限");
builder.setMessage("请点击允许开启");
// 拒绝, 无法修改
builder.setNegativeButton("拒绝",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,
"您已拒绝修系统Setting的屏幕亮度权限", Toast.LENGTH_SHORT)
.show();
}
});
builder.setPositiveButton("去开启",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 打开允许修改Setting 权限的界面
Intent intent = new Intent(
Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri
.parse("package:"
+ getPackageName()));
startActivityForResult(intent,
REQUEST_CODE_WRITE_SETTINGS);
}
});
builder.setCancelable(false);
builder.show();
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Settings.System.canWrite方法检测授权结果
if (Settings.System.canWrite(getApplicationContext())) {
// 5.调用修改Settings屏幕亮度的方法 屏幕亮度值 200
ModifySettingsScreenBrightness(MainActivity.this, 200);
Toast.makeText(this, "系统屏幕亮度值" + getScreenBrightness(this),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "您已拒绝修系统Setting的屏幕亮度权限",
Toast.LENGTH_SHORT).show();
}
}
}
}

修改Setting 中屏幕亮度值 实现

拥有系统签名的应用可以直接调用此方法修改系统屏幕亮度,非系统签名应用,只有用户授权后才可以修改。

/**

* 5.修改Setting 中屏幕亮度值
*
* 修改Setting的值需要动态申请权限
* android:name="android.permission.WRITE_SETTINGS"/>
* **/

private void ModifySettingsScreenBrightness(Context context,
int birghtessValue) {
// 首先需要设置为手动调节屏幕亮度模式
setScreenManualMode(context);

ContentResolver contentResolver = context.getContentResolver();
Settings.System.putInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS, birghtessValue);
}

四、完整代码实现

完整代码实现如下:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//获取屏幕亮度
getScreenBrightness(this);
Toast.makeText(this, "系统屏幕亮度值" + getScreenBrightness(this),
Toast.LENGTH_SHORT).show();
// 设置APP 屏幕亮度后,系统Setting亮度将对此app 不生效
setAppScreenBrightness(100);
allowModifySettings();
setContentView(R.layout.activity_main);

}

/**
* 1.获取系统默认屏幕亮度值 屏幕亮度值范围(0-255)
* **/

private int getScreenBrightness(Context context) {
ContentResolver contentResolver = context.getContentResolver();
int defVal = 125;
return Settings.System.getInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS, defVal);
}

/**
* 2.设置 APP界面屏幕亮度值方法
* **/

private void setAppScreenBrightness(int birghtessValue) {
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = birghtessValue / 255.0f;
window.setAttributes(lp);
}

/**
* 3.关闭光感,设置手动调节背光模式
*
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节屏幕亮度模式值为1
*
* SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节屏幕亮度模式值为0
* **/

public void setScreenManualMode(Context context) {
ContentResolver contentResolver = context.getContentResolver();
try {
int mode = Settings.System.getInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE);
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
Settings.System.putInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
}

/**
* 4.非系统签名应用,引导用户手动授权修改Settings 权限
* **/

private static final int REQUEST_CODE_WRITE_SETTINGS = 1000;

private void allowModifySettings() {
// Settings.System.canWrite(MainActivity.this)
// 检测是否拥有写入系统 Settings 的权限
if (!Settings.System.canWrite(MainActivity.this)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this,
android.R.style.Theme_Material_Light_Dialog_Alert);
builder.setTitle("请开启修改屏幕亮度权限");
builder.setMessage("请点击允许开启");
// 拒绝, 无法修改
builder.setNegativeButton("拒绝",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,
"您已拒绝修系统Setting的屏幕亮度权限", Toast.LENGTH_SHORT)
.show();
}
});
builder.setPositiveButton("去开启",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 打开允许修改Setting 权限的界面
Intent intent = new Intent(
Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri
.parse("package:"
+ getPackageName()));
startActivityForResult(intent,
REQUEST_CODE_WRITE_SETTINGS);
}
});
builder.setCancelable(false);
builder.show();
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Settings.System.canWrite方法检测授权结果
if (Settings.System.canWrite(getApplicationContext())) {
// 5.调用修改Settings屏幕亮度的方法 屏幕亮度值 200
ModifySettingsScreenBrightness(MainActivity.this, 200);
Toast.makeText(this, "系统屏幕亮度值" + getScreenBrightness(this),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "您已拒绝修系统Setting的屏幕亮度权限",
Toast.LENGTH_SHORT).show();
}
}
}
}

/**
* 5.修改Setting 中屏幕亮度值
*
* 修改Setting的值需要动态申请权限
* android:name="android.permission.WRITE_SETTINGS"/>
* **/

private void ModifySettingsScreenBrightness(Context context,
int birghtessValue) {
// 首先需要设置为手动调节屏幕亮度模式
setScreenManualMode(context);

ContentResolver contentResolver = context.getContentResolver();
Settings.System.putInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS, birghtessValue);
}
}

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除。同时感谢您的阅读,期待您的关注。

点个在看,方便您使用时快速查找!

浏览 54
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报