公司有个需求,弹出对话框,设置当前屏幕亮度是最大亮度的90%,对话框消失,恢复到原来亮度。有一种特殊情况,就是在弹出对话框的界面打开之后,用户手动调节了亮度,需要在界面中监听亮度变化
工具类代码:

public class ScreenUtil
{/*** 判断是否开启了自动亮度调节*/public static boolean isAutoBrightness(Context context){ContentResolver resolver = context.getContentResolver();boolean automicBrightness = false;try{automicBrightness = Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;}catch (Settings.SettingNotFoundException e){e.printStackTrace();}return automicBrightness;}/*** 获取屏幕的亮度** @param activity* @return*/public static int getScreenBrightness(Activity activity) {int nowBrightnessValue = 0;ContentResolver resolver = activity.getContentResolver();try {nowBrightnessValue = Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS);} catch (Exception e) {e.printStackTrace();}return nowBrightnessValue;}/*** 设置亮度** @param activity* @param brightness*/public static void setBrightness(Activity activity, int brightness) {WindowManager.LayoutParams lp = activity.getWindow().getAttributes();lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);activity.getWindow().setAttributes(lp);}/*** 停止自动亮度调节** @param activity*/public static void stopAutoBrightness(Activity activity) {Settings.System.putInt(activity.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);}/*** 开启亮度自动调节** @param activity*/public static void startAutoBrightness(Activity activity) {Settings.System.putInt(activity.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);}/*** 保存亮度设置状态*  不保存,只能在当前的activity中有作用* @param resolver* @param brightness*/public static void saveBrightness(ContentResolver resolver, int brightness) {Uri uri = Settings.System.getUriFor("screen_brightness");Settings.System.putInt(resolver, "screen_brightness",brightness);// resolver.registerContentObserver(uri, true, myContentObserver);resolver.notifyChange(uri, null);}}

对话框中相应的代码

 private int currentBrightness=0;//获得当前屏幕亮度private boolean isAutoBrightness=false;//记录屏幕是否开启自动调节.......
//对话框显示的时候,设置亮度为最大亮度的90%setBrightness90();this.setOnDismissListener(new OnDismissListener(){@Overridepublic void onDismiss(){//对话框消失的时候,还原亮度setDefaultBrightness();}});
....../*** 设置屏幕亮度为最大亮度的90%*/private void setBrightness90(){currentBrightness = ScreenUtil.getScreenBrightness(mContext);isAutoBrightness = ScreenUtil.isAutoBrightness(mContext);if(isAutoBrightness){ScreenUtil.stopAutoBrightness(mContext);}String model = Build.MODEL;int brightness =0;if ("ALP-AL00".equals(model)){//如果是华为Mate 10 就设置最大亮度是165brightness=165;}else {//其余大部分手机最大亮度是255brightness=255;}ScreenUtil.setBrightness(mContext, (int) (brightness*0.9));}/*** 还原屏幕亮度*/private void setDefaultBrightness(){if(isAutoBrightness){ScreenUtil.startAutoBrightness(mContext);}ScreenUtil.setBrightness(mContext, currentBrightness);}public void setCurrentBrightnessAndAutoBrightness(int currentBrightness,boolean autoBrightness){this.currentBrightness = currentBrightness;isAutoBrightness = autoBrightness;}

弹出对话框的界面

 /*** 监听屏幕亮度变化*/private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {@Overridepublic void onChange(boolean selfChange) {if(!qrCodeWindow.isShowing()){//不显示对话框,根据系统设置调节屏幕亮度ScreenUtil.setBrightness(IDCardOneCodeActivity.this,ScreenUtil.getScreenBrightness(IDCardOneCodeActivity.this));}else{//显示对话框,不根据系统调节变化亮度,先设置当前亮度和是否自动调节亮度配置,等对话框消失以后,设置亮度为调整后的亮度qrCodeWindow.setCurrentBrightnessAndAutoBrightness(ScreenUtil.getScreenBrightness(IDCardOneCodeActivity.this),ScreenUtil.isAutoBrightness(IDCardOneCodeActivity.this));}}};@Overrideprotected void onResume(){super.onResume();getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), true,mBrightnessObserver);}@Overrideprotected void onDestroy(){super.onDestroy();getContentResolver().unregisterContentObserver(mBrightnessObserver);}

设置屏幕亮度,并且监听屏幕亮度变化相关推荐

  1. Android 修改系统屏幕亮度及监听

    效果 修改系统屏幕亮度这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到. emmm 效果图好像看不出来变化..不过不是很重要.. 操作拆解 上图中可以看到,分别有加减按钮和seekbar来控制亮 ...

  2. js 监听屏幕转动orientationchange 获取横屏状态window.orientation 监听屏幕旋转完成 苹果手机屏幕多次旋转之后window获取的尺寸不对

    监听屏幕转动 // 监听屏幕转动 window.addEventListener('orientationchange',function(){// 这个时候屏幕的尺寸数据还没有变化var orien ...

  3. android 屏幕方向监听,Android如何监听屏幕旋转

    背景 关于个人,前段时间由于业务太忙,所以一直没有来得及思考并且沉淀点东西:同时组内一个个都在业务上能有自己的思考和总结,在这样的氛围下,不由自主的驱使周末开始写点东西,希望自己除了日常忙于业务,可以 ...

  4. Flutter中获取监听屏幕方向、锁定屏幕方向

    文章目录 获取当前屏幕的方向 实时监听屏幕方向的改变 锁定屏幕方向 锁定方向,禁止App随着设备的方向改变 锁定启动图的方向 默认效果 Android配置 IOS配置 动态改变Flutter的屏幕方向 ...

  5. react 监听屏幕旋转的判断

    1.例子使用场景 屏幕旋转后 重新设置悬浮球的位置 this.getDirection() window.addEventListener('resize', this.getDirection) / ...

  6. android 手机监听屏幕锁屏,用户解锁

    用到的场景很多,自己发挥 ,废话不多说直接上代码: private classScreenBroadcastReceiverextendsBroadcastReceiver{privateString ...

  7. 监听屏幕 android.intent.action.USER_PRESENT

    在做解锁监听程序时,一开始采用监听屏幕SCREEN_ON和SCREEN_OFF这两个action. 但奇怪的是,这两个action只能通过代码动态的形式注册,才能被监听到,使用AndroidManif ...

  8. android 触摸监听重写_Android监听屏幕的滑动事件

    实现监听屏幕上下左右滑动事件 前段时间为了实现这个功能在网上找了很多教程,发现很多教程都是很大的篇幅,对于像我这种一点都不了解的人GestureListener的人来说可能很难理解,动不动就是几百行代 ...

  9. android 监听屏幕是否锁屏

    今天,简单讲讲如何监听手机屏幕是否锁屏. 实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可 ...

  10. touch事件总结,监听屏幕点击事件

    Touch对象--MDN TouchEvent--MDN 一.问题背景 click事件在移动端的300毫秒延迟问题 当需要监听诸如左滑.右滑之类的事件 二.知识点概括 1. 事件类型 touchsta ...

最新文章

  1. pytorch 获取模型参数_剑指TensorFlow,PyTorch Hub官方模型库一行代码复现主流模型...
  2. 单网段DHCP服务器的架设
  3. 实验Matlab数值运算,MATLAB数值实验一(数据的插值运算及其应用完整版
  4. 开源团队协作 TMS 2.4.0 版本发布
  5. JS中调用本地Winform程序并传递参数
  6. Cambridge center for digital innovation at judge business school
  7. Sqoop 1.99.3 hadoop-1.2.1 安装配置
  8. 给opentaps添加定制的表和字段
  9. 小米出招黑科技,5S或成全球首款”Under glass“指纹识别手机
  10. 10_隐马尔科夫模型HMM2_统计学习方法
  11. 计算机编码中进制的区别,计算机中的进制和编码(转载)
  12. 从U盘安装windows/linux操作系统
  13. python3编码(encode,decode)
  14. 基于matlab深度学习的水果图像识别算法
  15. vue注册了却没有使用的错误: component has been registered but not used
  16. 90后HTTP 的爱情故事
  17. 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...
  18. leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。
  19. framework初始化错误,面试大厂应该注意哪些问题?隔壁都馋哭了
  20. cuda8.0+ubuntu14.04+GTX970驱动 安装

热门文章

  1. 树莓派4B安装配置LibreELEC并连接到三星电视
  2. js采集图片批量下载
  3. 什么是ISBN码及如何制作
  4. mysql数据库自动备份软件SQLBackupAndFTP简介(图文)
  5. PS证件照更改背景颜色
  6. 苹果电脑语音听写的问题(电话中间加-,或者想要大写应该怎么设置呢)
  7. sdk寄存器地址linux,S32K SDK使用详解之PinSettings组件配置与使用详解(S32K1xx PORT 和GPIO模块)...
  8. 全自动高清录播服务器,全自动高清录播服务器 高清录播系统
  9. Hi3519av100 编译kernel
  10. 游戏或制图用的计算机配置单,自己组装电脑配置单6000元左右适合PS制图与吃鸡游戏的电脑配置推荐...