为了控制屏幕的亮度,特地做了一个工具类文件,直接贴代码,个别问题说明如下:
1、修改系统亮度值时,因为要修改Settings.System.SCREEN_BRIGHTNESS 的值,所以需要相应的系统权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
2、即使系统默认已经开启了自动调整亮度功能,我们仍然可以直接对系统亮度进行修改。
3、系统亮度值范围:0~255;当前应用窗口亮度范围:0.0f~1.0f。(本代码已将两个范围统一转换为0~100)
4、亮度调至0时,系统屏幕将黑屏,按键及触控均停止响应。(本代码限制最低亮度值为1)
源代码如下:
package cn.com.bfyb.brightnesscontrol;
import android.app.Activity;
import android.content.ContentResolver;
import android.net.Uri;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.view.WindowManager;
public class BrightnessControler {
private Activity activity;
private ContentResolver contentResolver;
private int stepValue = 10;
public BrightnessControler(Activity activity) {
// TODO Auto-generated constructor stub
this.activity = activity;
contentResolver = activity.getContentResolver();
}
// 系统当前是否自动调整亮度
public boolean isAutoBrightness() {
boolean automicBrightness = false;
try {
automicBrightness = Settings.System.getInt(contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
} catch (SettingNotFoundException e) {
e.printStackTrace();
}
return automicBrightness;
}
// 获取系统亮度值:0~100
public int getSysBrightness() {
int nowBrightnessValue = 0;
try {
nowBrightnessValue = (int) (android.provider.Settings.System
.getInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS) / 2.55f);
} catch (Exception e) {
e.printStackTrace();
}
return nowBrightnessValue;
}
// 获取当前应用亮度值:0~100
public int getAppBrightness() {
return (int) (activity.getWindow().getAttributes().screenBrightness * 100);
}
// 设置系统亮度
public void setSysBrightness(int brightness) {
// if(isAutoBrightness())
// stopAutoBrightness();
setAppBrightness(brightness);
// 保存亮度至系统
saveBrightnessToSys(brightness);
}
// 设置当前应用亮度
public void setAppBrightness(int brightness) {
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.screenBrightness = Float.valueOf(brightness) * (1f / 100f);
activity.getWindow().setAttributes(lp);
}
// 系统亮度增加
public void lighterSys() {
int bri = getSysBrightness() + stepValue;
if (bri > 100)
bri = 100;
setSysBrightness(bri);
}
// 系统亮度降低
public void darkerSys() {
int bri = getSysBrightness() - stepValue;
if (bri < 1)
bri = 1;
setSysBrightness(bri);
}
// 当前应用亮度增加
public void lighterApp() {
int bri = getAppBrightness() + stepValue;
if (bri > 100)
bri = 100;
setAppBrightness(bri);
}
// 当前应用亮度降低
public void darkerApp() {
int bri = getAppBrightness() - stepValue;
if (bri < 1)
bri = 1;
setAppBrightness(bri);
}
// 设置亮度单步增减值
public void setStepValue(int step) {
this.stepValue = step;
}
// 关闭系统自动调整亮度
public void stopAutoBrightness() {
Settings.System.putInt(activity.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
// 开启系统自动调整亮度
public void startAutoBrightness() {
Settings.System.putInt(activity.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
// 保存亮度值至系统
private void saveBrightnessToSys(int brightness) {
Uri uri = android.provider.Settings.System
.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
android.provider.Settings.System.putInt(contentResolver,
android.provider.Settings.System.SCREEN_BRIGHTNESS,
(int) (brightness * 2.55f));
contentResolver.notifyChange(uri, null);
}
}