在Activity中实现获取系统亮度状态,使用seekbar 修改屏幕亮度,以及实现屏幕亮度自动适应


import android.app.Activity;import android.app.AlertDialog;import android.content.ContentResolver;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnCancelListener;import android.net.Uri;import android.provider.Settings;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.WindowManager;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.SeekBar;public class BrightnessSettings {private static final String TAG = BrightnessSettings.class.getSimpleName();Context context;/** * 获得当前系统的亮度模式 SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 * SCREEN_BRIGHTNESS_MODE_MANUAL=0 为手动调节屏幕亮度 */public int getBrightnessMode() {int brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;try {brightnessMode = Settings.System.getInt(context.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE);} catch (Exception e) {Log.e(TAG, "获得当前屏幕的亮度模式失败:", e);}return brightnessMode;}/** * 设置当前系统的亮度模式 SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 * SCREEN_BRIGHTNESS_MODE_MANUAL=0 为手动调节屏幕亮度 */public void setBrightnessMode(int brightnessMode) {try {Settings.System.putInt(context.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, brightnessMode);} catch (Exception e) {Log.e(TAG, "设置当前屏幕的亮度模式失败:", e);}}/** * 获得当前系统的亮度值: 0~255 */public int getSysScreenBrightness() {int screenBrightness = MAX_BRIGHTNESS;try {screenBrightness = Settings.System.getInt(context.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);} catch (Exception e) {Log.e(TAG, "获得当前系统的亮度值失败:", e);}return screenBrightness;}/** * 设置当前系统的亮度值:0~255 */public void setSysScreenBrightness(int brightness) {try {ContentResolver resolver = context.getContentResolver();Uri uri = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS,brightness);resolver.notifyChange(uri, null); // 实时通知改变} catch (Exception e) {Log.e(TAG, "设置当前系统的亮度值失败:", e);}}/** * 设置屏幕亮度,这会反映到真实屏幕上 *  * @param activity * @param brightness */public void setActScreenBrightness(final Activity activity,final int brightness) {final WindowManager.LayoutParams lp = activity.getWindow().getAttributes();lp.screenBrightness = brightness / (float) MAX_BRIGHTNESS;activity.getWindow().setAttributes(lp);}/** * 显示调节亮度的设置对话框 *  * @param act */public void showBrightnessSettingsDialog(final Activity act) {if (act == null) {return;}context = act.getApplicationContext();final int oldBrightness = getSysScreenBrightness(); // 当前系统的亮度final int oldBrightnessMode = getBrightnessMode(); // 当前系统的亮度模式boolean autoMode = (oldBrightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); // 是否自动调节亮度模式LayoutInflater inflater = act.getLayoutInflater();View dialogLayout = inflater.inflate(R.layout.brightnesee_seekbar_dialog, null);CheckBox cbAutoMode = (CheckBox) dialogLayout.findViewById(R.id.cb_auto_mode); // 自动调节亮度cbAutoMode.setChecked(autoMode);final SeekBar seekbar = (SeekBar) dialogLayout.findViewById(R.id.seekbar); // 手动调节亮度int progress = oldBrightness - MIN_BRIGHTNESS; // SeekBar的值范围:0~225,代表的亮度值是30~255。seekbar.setProgress(progress < 0 ? 0 : progress);seekbar.setMax(MAX_BRIGHTNESS - MIN_BRIGHTNESS); // 最大值:225// 自动调节亮度选项改变时cbAutoMode.setOnCheckedChangeListener(new OnCheckedChangeListener() {public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {if (isChecked) {seekbar.setVisibility(View.GONE);setBrightnessMode(Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);} else {seekbar.setVisibility(View.VISIBLE);setBrightnessMode(Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);}}});// 手动调节亮度滑块滑动时seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {int brightness = progress + MIN_BRIGHTNESS; // 实际亮度// 亮度滑块滑动时,实时改变屏幕亮度setActScreenBrightness(act, brightness); // 改变当前屏幕亮度setSysScreenBrightness(brightness); // 改变系统屏幕亮度}});// 是否显示手动调节亮度滑块if (autoMode) {seekbar.setVisibility(View.GONE);}// 显示调节亮度的dialogAlertDialog.Builder builder = new AlertDialog.Builder(act);builder.setTitle(R.string.brightness_setting);builder.setView(dialogLayout);builder.setPositiveButton(android.R.string.ok,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {// 点击确定按钮,恢复activity亮度设置setActScreenBrightness(act, -MAX_BRIGHTNESS);}});builder.setNegativeButton(android.R.string.cancel,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {// 点击取消按钮,则需要还原亮度模式和亮度值的设置recoverBrightnessSetting(act, oldBrightnessMode,oldBrightness);}});builder.setOnCancelListener(new OnCancelListener() { // 点击返回键/dialog外部等让dialog消失的事件@Overridepublic void onCancel(DialogInterface dialog) {recoverBrightnessSetting(act, oldBrightnessMode, oldBrightness);}});builder.show();}/** * 还原亮度模式和亮度值的设置 *  * @param act * @param brightnessMode * @param brightness */private void recoverBrightnessSetting(final Activity act,final int brightnessMode, final int brightness) {setBrightnessMode(brightnessMode);setSysScreenBrightness(brightness);setActScreenBrightness(act, -MAX_BRIGHTNESS);}/** 可调节的最小亮度值 */public static final int MIN_BRIGHTNESS = 30;/** 可调节的最大亮度值 */public static final int MAX_BRIGHTNESS = 255;// public static void main(String[] args) {// lumiance_setting_confirm_bt_txt// }}

完整项目代码下载  :http://download.csdn.net/detail/csh130/9215419

更多相关文章

  1. Android 编程获取手机型号,本机电话号码,sdk版本及firmware版本号(
  2. 系统音量 android
  3. Android系统源码framework SystemUI导入eclipse编译
  4. Cobub Razor移动应用分析系统
  5. Android修改系统闹铃的持续时间
  6. Android系统应用程序安装过程源码分析
  7. Android Build获得系统信息

随机推荐

  1. 表单、内联框架以及CSS基础
  2. PHP实例演示命名空间与类自动加载器
  3. 谷歌搜索官方给出的title标题优化,适用于
  4. PHP中实例演示CURD操作
  5. 1.markdown语法及部分html标签
  6. 预处理语句与存储过程
  7. PDO预处理中的prepare()和execute()方法
  8. PHP 数据对象 (PDO)
  9. 跨境电商怎么做?在小县城能做吗?
  10. Android之SQLite学习