Android 实现调整屏幕亮度,以及自动适应
16lz
2021-01-23
在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
更多相关文章
- Android 编程获取手机型号,本机电话号码,sdk版本及firmware版本号(
- 系统音量 android
- Android系统源码framework SystemUI导入eclipse编译
- Cobub Razor移动应用分析系统
- Android修改系统闹铃的持续时间
- Android系统应用程序安装过程源码分析
- Android Build获得系统信息