链接:http://developer.android.com/reference/android/provider/Settings.System.html

  最近在做的项目,需要使用亮度调节实现夜间模式,需求是进入 App之后,保持屏幕亮度不变,如果点下亮度切换按钮,就能在两种亮度值之间切换。此外,如果 App被切换到后台,或者锁屏,都需要还原回原始系统亮度。

  一开始想的比较简单,以为用 Settings.System的设置就可以实现,动手写代码之后,才发现有以下几个问题需要处理:

    1. 在 App入口不唯一的情况下(通过Widget、Notification,第一次进入的不是同一个界面),如何取到系统亮度的初始值,用于还原操作;

    2. 怎么判断 App被切换到了后台;

    3. 监听锁屏事件;

    4. 光改变系统亮度值,不改变 Activity所占有的 Window亮度,是不会有作用的。

  解决方法:

    1. 使用单例模式,保证使用亮度调节之前,都对原始系统亮度值进行过保存,以下是获取系统亮度值的代码

    private static void initBrightnessSetting() {int brightness = 200;int mode = 0;try {brightness = Settings.System.getInt(sContext.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);} catch (SettingNotFoundException e) {e.printStackTrace();}try {mode = Settings.System.getInt(sContext.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE);} catch (SettingNotFoundException e) {e.printStackTrace();}sOriginalBrightness = brightness;sOriginalMode = mode;}

    2. 有两种方法,第一种是在每个 Activity执行 onPause回调的时候获取当前的 Android任务列表,第二种是在 App中建立一个 Stack/List存储每个 Activity的状态(代码略,只需要在最后一个执行 onPause的 Activity中对标志位进行重置即可)。推荐后者。

    public static boolean isBackground() {boolean isBackground = true;List<RunningTaskInfo> taskInfo = getRunningTaskInfos(1);if (taskInfo.size() > 0) {if (taskInfo.get(0).baseActivity.getPackageName().equals(SinaNewsApplication.getAppPackageName())) {isBackground = false;Logger.TEST.info(taskInfo.get(0).baseActivity.getClassName());}}return isBackground;}

    3. 原先我一直认为 Android没有一个好的监听锁屏方法,只能使用监听 Intent.ACTION_SCREEN_OFF的方法,这次做亮度调节的时候,才发现一个事实..锁屏 == 亮度为零。不知道为什么,采用静态注册的方法不能监听到 ACTION_SCREEN_OFF的广播,必须要在某个组件里动态注册监听器。怎么判断是哪个 Activity的 Window对象来改变亮度呢?就需要用到第二个问题中的 Activity Stack,把栈顶的 Activity拿出来就可以了。

    4. 很多博客写到系统亮度调节,都会说这么做就可以了:

        Settings.System.putInt(sContext.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, systemMode);Settings.System.putInt(sContext.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, systemBrightness);

    这么做确实能改变系统的亮度值,但是你会发现亮度值变了,屏幕还是原来的亮度,这是因为系统的亮度值并没有应用到当前 Activity的 Window对象,所以还需要:

        Window window = activity.getWindow();WindowManager.LayoutParams lp = window.getAttributes();lp.screenBrightness = brightness;window.setAttributes(lp);

    如果先启动了 Activity A设置了一次亮度200,然后跳转到 Activity B又做了一次同样的操作设置亮度50,退出 B之后,发现 A的亮度还是200。出现这种现象的原因就是,处于后台的 Activity的 Window的亮度值在设置后,并不会随着它之上的 Activity的 Window亮度所更改。所以还需要在每个 Activity的 onResume方法中进行判断。

  

转载于:https://www.cnblogs.com/haitong/p/3482650.html

[03] Android系统亮度调节相关推荐

  1. android启动界面修改工具,Android 系统界面调节工具使用及功能

    Android 系统界面调节工具(Android System UI Tuner)是个隐藏功能,里面有一些实验性功能,可以辅助平时开发. 1. 打开 系统界面调节工具是个隐藏功能,打开他说简单也简单, ...

  2. 联想拯救者R9000p 双系统亮度调节解决方案

    联想拯救者R9000p 双系统亮度调节解决方案 问题描述:在联想拯救者R9000p安装双系统时ubuntu系统的亮度无法调节,一直保持在最大亮度 解决方案:更新显卡驱动并修改配置信息 Ubuntu版本 ...

  3. android手动亮度调节,背光闪烁,自动背光调节

    AAL与CABC背光选择(两种方式控制背光):参考[FAQ05966]89平台支持BB端CABC(即AAL)或LCM端CABC方式控制背光,两种方式使用方法如下[BB端CABC(即AAL)]- 打开功 ...

  4. Android 软件亮度调节

    打算做一款阅读软件,其中有涉及到调节亮度的,于是花了点时间研究了下关于亮度调节的东西,其实也是参考别人的, 思路:想要调节软件的亮度,必须要有获得系统配置的权限,所以先添加权限 <uses-pe ...

  5. Android 屏幕亮度调节

    亮度调节: 1. 当前屏幕的亮度调节 2. 整个系统的亮度调节(需要申请系统权限) <uses-permission android:name="android.permission. ...

  6. Android系统音量调节策略学习总结

    二.外设类型 USB音箱底座 蓝牙音箱 3.5mm线控耳机 三.相关术语 track volume: 单个App设置音量时设置的是这个,它只影响本App的音量. stream volume: 设置某一 ...

  7. android 系统亮度,android 设置系统屏幕亮度

    android 设置系统屏幕亮度 权限 /** * 获得当前屏幕亮度的模式 * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 * SCREEN_BRIGHT ...

  8. win10 系统亮度调节

    win10系统发行后,许多用户尝试新的系统发现安装之后亮度无法调节,我也多次遇见此情况 故在此记录修改方式: 打开注册表 -> 搜索键值featuretestcontrol -> 修改键值 ...

  9. android 闪光灯 亮度调节,手机亮度调节器(com.morega.mgamread) - 7.4.1 - 应用 - 酷安

    权限信息 · 拍摄照片和视频 · 在其他应用之上显示内容 · 修改或删除您的USB存储设备中的内容 · 控制闪光灯 · 对正在运行的应用重新排序 · android.permission.FOREGR ...

最新文章

  1. iOS 新浪微博-5.2 首页微博列表_转发微博/工具栏
  2. 51CTO-ANDROID相关资料收集整理
  3. 【10.4】线程同步--Lock、RLock
  4. 套接字有哪些类型?socket有哪些类型?
  5. Firefox火狐浏览器自用技巧汇总--以备使用--13.5.16
  6. 微软开源AI诊断工具Error Analysis
  7. java简单文本编译器_java -简易文本编辑器
  8. 小贷公司的风险成因及应对策略——策略篇
  9. Linux下vsftpd的安装,Java上传文件实现。
  10. python源码中的学习笔记_第9章_类与对象
  11. 写一彩票程序,要求能随机产生并按照升序输出1-30之间的7个数,且其中任意两个数字不能重复
  12. Apache Tomcat 安装配置图文详细教程
  13. shp系列(四)——利用C++进行Shx文件的读(打开)
  14. php百度网盘登录,php百度网盘同步_http200_mmdb
  15. Android Framework 音频子系统(02)音频系统框架
  16. c语言 随机四则运算,随机四则运算 C语言
  17. Python中向列表添加元素的方法
  18. 操作系统学习笔记02【进程控制——进程互斥的硬件实现方法】【自用】
  19. 测试基础--测试方法
  20. 「Python条件结构」显示学号及提示信息

热门文章

  1. 研究CV、研究美,MMFashion开源库升级~
  2. 飞桨博士会第四期,中国深度学习技术俱乐部诚邀您加入
  3. ICCV 2019 | 华科提出对称限制的校正网络,显著改进场景文本识别
  4. 你知道吗?Python原来可以做这些
  5. 【机器学习】机器学习从零到掌握之八 -- 教你读懂决策树原理
  6. 【OpenCV】OpenCV函数精讲之 -- imwrite()函数
  7. 2021高校暑假时间汇总!最长70天
  8. c++图片背景替换为白色_4种方法,3秒快速更换证件照背景!你还要去照相馆花冤枉钱吗?...
  9. 什么!卷积要旋转180度?!
  10. python标准库sys_Python——标准库 Sys模块