Android 修改屏幕亮度方案

和你一起終身學(xué)習(xí),這里是程序員Android
經(jīng)典好文推薦,通過閱讀本文,您將收獲以下知識點:
一、獲取系統(tǒng)Settings 中的亮度
二、修改APP界面屏幕亮度,不會影響其他APP
三、修改系統(tǒng)Settings 中屏幕亮度,影響所有APP
四、完整代碼實現(xiàn)
一、獲取系統(tǒng)Settings 中的亮度
系統(tǒng)屏幕亮度值在(0~255)之間,獲取方法很簡單,只需要調(diào)用以下方法即可。
/*** 1.獲取系統(tǒng)默認(rèn)屏幕亮度值 屏幕亮度值范圍(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.修改系統(tǒng) Settings 中屏幕亮度,影響所有APP.
二,修改APP界面屏幕亮度,不會影響其他APP
修改自身 APP 亮度很簡單,只需要在Activity OnCreate方法調(diào)用如下代碼即可。
/**
* 2.設(shè)置 APP界面屏幕亮度值方法
* **/* 2.設(shè)置 APP界面屏幕亮度值方法
* **/
private void setAppScreenBrightness(int birghtessValue) {
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = birghtessValue / 255.0f;
window.setAttributes(lp);
}
三、修改系統(tǒng)Settings 中屏幕亮度,影響所有APP
修改系統(tǒng) Settings 中的屏幕亮度,由于會影響到所有APP,需要申請修改Settings的權(quán)限
,同時需要取消光感自動調(diào)節(jié)屏幕亮度的功能,設(shè)置為手動調(diào)節(jié)模式,否則光感傳感器會隨著光照強度的變化修改系統(tǒng)屏幕亮度,并且非系統(tǒng)簽名的APP,需要用戶手動授權(quán)后才可以修改背光亮度。
關(guān)閉光感,設(shè)置手動調(diào)節(jié)背光模式實現(xiàn)方法如下:
/**
* 3.關(guān)閉光感,設(shè)置手動調(diào)節(jié)背光模式
*
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自動調(diào)節(jié)屏幕亮度模式值為1
*
* SCREEN_BRIGHTNESS_MODE_MANUAL 手動調(diào)節(jié)屏幕亮度模式值為0
* **/* 3.關(guān)閉光感,設(shè)置手動調(diào)節(jié)背光模式
*
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自動調(diào)節(jié)屏幕亮度模式值為1
*
* SCREEN_BRIGHTNESS_MODE_MANUAL 手動調(diào)節(jié)屏幕亮度模式值為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();
}
}
非系統(tǒng)簽名應(yīng)用,引導(dǎo)用戶手動授權(quán)修改Settings 權(quán)限
非系統(tǒng)簽名應(yīng)用,無法直接修改Settings,需要引導(dǎo)用戶手動授權(quán)。

引導(dǎo)用戶手動授權(quán)
/**
* 4.非系統(tǒng)簽名應(yīng)用,引導(dǎo)用戶手動授權(quán)修改Settings 權(quán)限
* **/
private static final int REQUEST_CODE_WRITE_SETTINGS = 1000;
private void allowModifySettings() {
// Settings.System.canWrite(MainActivity.this)
// 檢測是否擁有寫入系統(tǒng) Settings 的權(quán)限
if (!Settings.System.canWrite(MainActivity.this)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this,
android.R.style.Theme_Material_Light_Dialog_Alert);
builder.setTitle("請開啟修改屏幕亮度權(quán)限");
builder.setMessage("請點擊允許開啟");
// 拒絕, 無法修改
builder.setNegativeButton("拒絕",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,
"您已拒絕修系統(tǒng)Setting的屏幕亮度權(quán)限", Toast.LENGTH_SHORT)
.show();
}
});
builder.setPositiveButton("去開啟",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 打開允許修改Setting 權(quán)限的界面
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方法檢測授權(quán)結(jié)果
if (Settings.System.canWrite(getApplicationContext())) {
// 5.調(diào)用修改Settings屏幕亮度的方法 屏幕亮度值 200
ModifySettingsScreenBrightness(MainActivity.this, 200);
Toast.makeText(this, "系統(tǒng)屏幕亮度值" + getScreenBrightness(this),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "您已拒絕修系統(tǒng)Setting的屏幕亮度權(quán)限",
Toast.LENGTH_SHORT).show();
}
}
}
}
修改Setting 中屏幕亮度值 實現(xiàn)
擁有系統(tǒng)簽名的應(yīng)用可以直接調(diào)用此方法修改系統(tǒng)屏幕亮度,非系統(tǒng)簽名應(yīng)用,只有用戶授權(quán)后才可以修改。
/*** 5.修改Setting 中屏幕亮度值
*
* 修改Setting的值需要動態(tài)申請權(quán)限
* android:name="android.permission.WRITE_SETTINGS"/>
* **/
private void ModifySettingsScreenBrightness(Context context,
int birghtessValue) {
// 首先需要設(shè)置為手動調(diào)節(jié)屏幕亮度模式
setScreenManualMode(context);
ContentResolver contentResolver = context.getContentResolver();
Settings.System.putInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS, birghtessValue);
}
四、完整代碼實現(xiàn)
完整代碼實現(xiàn)如下:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//獲取屏幕亮度
getScreenBrightness(this);
Toast.makeText(this, "系統(tǒng)屏幕亮度值" + getScreenBrightness(this),
Toast.LENGTH_SHORT).show();
// 設(shè)置APP 屏幕亮度后,系統(tǒng)Setting亮度將對此app 不生效
setAppScreenBrightness(100);
allowModifySettings();
setContentView(R.layout.activity_main);
}
/**
* 1.獲取系統(tǒng)默認(rèn)屏幕亮度值 屏幕亮度值范圍(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.設(shè)置 APP界面屏幕亮度值方法
* **/
private void setAppScreenBrightness(int birghtessValue) {
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = birghtessValue / 255.0f;
window.setAttributes(lp);
}
/**
* 3.關(guān)閉光感,設(shè)置手動調(diào)節(jié)背光模式
*
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自動調(diào)節(jié)屏幕亮度模式值為1
*
* SCREEN_BRIGHTNESS_MODE_MANUAL 手動調(diào)節(jié)屏幕亮度模式值為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.非系統(tǒng)簽名應(yīng)用,引導(dǎo)用戶手動授權(quán)修改Settings 權(quán)限
* **/
private static final int REQUEST_CODE_WRITE_SETTINGS = 1000;
private void allowModifySettings() {
// Settings.System.canWrite(MainActivity.this)
// 檢測是否擁有寫入系統(tǒng) Settings 的權(quán)限
if (!Settings.System.canWrite(MainActivity.this)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this,
android.R.style.Theme_Material_Light_Dialog_Alert);
builder.setTitle("請開啟修改屏幕亮度權(quán)限");
builder.setMessage("請點擊允許開啟");
// 拒絕, 無法修改
builder.setNegativeButton("拒絕",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,
"您已拒絕修系統(tǒng)Setting的屏幕亮度權(quán)限", Toast.LENGTH_SHORT)
.show();
}
});
builder.setPositiveButton("去開啟",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 打開允許修改Setting 權(quán)限的界面
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方法檢測授權(quán)結(jié)果
if (Settings.System.canWrite(getApplicationContext())) {
// 5.調(diào)用修改Settings屏幕亮度的方法 屏幕亮度值 200
ModifySettingsScreenBrightness(MainActivity.this, 200);
Toast.makeText(this, "系統(tǒng)屏幕亮度值" + getScreenBrightness(this),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "您已拒絕修系統(tǒng)Setting的屏幕亮度權(quán)限",
Toast.LENGTH_SHORT).show();
}
}
}
}
/**
* 5.修改Setting 中屏幕亮度值
*
* 修改Setting的值需要動態(tài)申請權(quán)限
* android:name="android.permission.WRITE_SETTINGS"/>
* **/
private void ModifySettingsScreenBrightness(Context context,
int birghtessValue) {
// 首先需要設(shè)置為手動調(diào)節(jié)屏幕亮度模式
setScreenManualMode(context);
ContentResolver contentResolver = context.getContentResolver();
Settings.System.putInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS, birghtessValue);
}
}
至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺得很優(yōu)秀,歡迎點擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除。同時感謝您的閱讀,期待您的關(guān)注。
點個在看,方便您使用時快速查找!
