返回顶部
首页 > 资讯 > 移动开发 >Android亮度调节的几种实现方法
  • 995
分享到

Android亮度调节的几种实现方法

方法Android 2022-06-06 06:06:37 995人浏览 安东尼
摘要

最近在做一个App的设置项,亮度调节。真正做时,发现Android亮度调节比预想要复杂一些。其实目前网上已有不少这方面的资料,但有些博文具有一定误导性。在此将这块内容按照自己理

最近在做一个App的设置项,亮度调节。真正做时,发现Android亮度调节比预想要复杂一些。其实目前网上已有不少这方面的资料,但有些博文具有一定误导性。在此将这块内容按照自己理解整理一下。

整体上看,Android亮度调节分为三个层次,分别是:Android系统亮度调节、Android App亮度调节和Android当前屏幕(Window)亮度调节。

1.Android系统亮度调节

Android系统亮度调节全局性最高,常见于系统设置中的亮度设置项。Android中提供了获取和设置系统亮度值(“手动模式下的亮度值”)的接口,具体如下:


// 获取系统亮度
Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
// 设置系统亮度
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,systemBrightness);

其中,需要注意的是,返回的亮度值是处于0-255之间的整型数值。

Android 2.1以后的系统中,系统亮度调节中新增了“自动亮度”选项。“自动亮度”是依据外界光源来自动的改变系统亮度,目前大部分手机中对“自动亮度”还可以进行小幅度的调节其值。与自动亮度相对应的是“手动亮度”,当处于“手动亮度”下,设置拖动亮度进度条会大幅度的改变Android系统亮度。“手动亮度”和“自动亮度”分别称之为Android系统的“亮度模式”。

与之相对应的,Android系统中也提供了获取和设置“亮度模式”的接口。


// 获取系统亮度模式
Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);


// 设置系统亮度模式
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, systemMode);

可是遗憾的是,Android中并未提供处于“自动亮度”模式下的亮度值接口。上面所说的获取系统亮度值接口实际上都是指“手动亮度”模式下的亮度值。

一般而言,通过手动亮度值以及设置系统亮度模式接口,可以满足常规的大部分针对Android系统亮度设置编码需求,以完成系统亮度调节。

 2.Android App亮度调节

与系统亮度不同的是,Android中并未直接提供针对于App层面的亮度调节方式。因此,对于需要进行App的亮度调节,可以通过系统亮度调节或当前屏幕的亮度调节方式间接来实现。

3.Android当前屏幕(Window)亮度调节

Android针对当前屏幕(Window)提供了设置亮度的接口,常见写法如下:


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

其中,需要注意的是此处的brightness是一个0.0-1.0之间的一个float类型数值。

默认情况下,当我们直接修改了系统亮度值后,当前Window中是可以即时反应出来亮度效果的,这是因为默认情况下,WindowManager.LayoutParams的screenBrightness的默认值为WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE。

即表示Window没有自己的亮度参数,将依随系统亮度效果的变化而变化。这也就是我们最常见的:当调整系统亮度后,所有Window都即时反应出系统亮度设置效果。

当时,实际项目中我们还会遇到此类需求:系统设置亮度时只针对当前Window或App内生效,而不影响到系统本身的亮度设置。

假设当前Window内有一个SeekBar,UI与系统亮度调节UI基本类似,用户可以滑动此SeekBar,使得当前Window亮度即时发生变化,且不影响到系统亮度效果。如何实现呢?

此时我们需要启用WindowManager.LayoutParams的screenBrightness参数,使之具有自动的特定亮度值,设置此值后在当前Window范围内,其将覆盖掉系统亮度设置。

因此,有必要将用户选择的亮度值转换为相应的Window亮度值(为与系统亮度值相一致,假设SeekBar的最大值为255)。


// 根据亮度值修改当前window亮度
public void changeAppBrightness(Context context, int brightness) {
  Window window = ((Activity) context).getWindow();
  WindowManager.LayoutParams lp = window.getAttributes();
  if (brightness == -1) {
    lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
  } else {
    lp.screenBrightness = (brightness <= 0 ? 1 : brightness) / 255f;
  }
  window.setAttributes(lp);
}

其中,brightness形参为用户选择的亮度值。

那么,上述代码中为什么有一个"brightness == -1"的判断呢?在此主要是考虑到App设置项中可能出现的“跟随系统亮度”或“恢复系统默认亮度”此类设置,当用户进行此类操作时,直接将screenBrightness参数还原成默认参数值即可。因为由前文描述“自动亮度”模式下系统亮度值是不能直接得到的,那么当系统处于“自动亮度”模式下,此时brightness参数值将无法准确确定,因此,将screenBrightness参数还原成默认参数值成为一个行之有效的方法。

 4.Android App亮度调节可行方案分析

目前网上有不少博文中提到App亮度调节时,提出的方案是在App设置项中,首先记录下设置之前的系统亮度值和亮度模式,用户在App设置项进行亮度调节时,直接修改系统亮度值,当用户退出此App,或App至于后台(如按下Home按键等),再将系统亮度还原。初看起来貌似一个可行的方案。但是主要存在如下几个问题:

1.如何获取到设置之前的系统亮度值和亮度模式(因为之后在此App外部要恢复系统亮度值到此初始值)?当用户每次进入到设置页时获取?严格意义上来说,是没法准确记录的。因为Android的用户操作不可预知性,如进入到设置页,拖动SeekBar设置了一个亮度值,此时直接修改了系统的亮度值,如果此时用户在未将应用至于后台或未将应用退出的情况下直接在App外部修改了系统亮度设置,如小米中可以通过下拉标题栏,直接就可以设置系统亮度。因此,App亮度设置之前的系统亮度初始值获取存在困难。

2.如何判断用户来到了App外部?因为此时需要恢复系统亮度设置到初始系统亮度。如用户可以按下Home按键,长按Home按键直接切换App,直接Back按键等一步步退出此App,下拉标题栏直接点击其他App通知信息进入到其他App,手机自动屏后解锁时用户直接进入其他应用等等,此类操作场景也具有不可预知性,因此,判断用户来到了App外部以恢复系统亮度到初始值的时机上也存在一定困难。

由此,App亮度调节方案推荐通过设置当前屏幕(Window)方式进行。

大致思路如下:用户在设置项中进行亮度调节时,调用changeAppBrightness()方法,将改变当前屏幕(Window)的亮度,此时对系统亮度无任何影响,接下来存在的问题终于要就集中于当用户来到本App其他Activity中,如果使得刚刚设置的亮度值得以即时反应出来。

 当用户进行亮度调节后,将当前亮度设置值保存起来(如保存到SharedPreferences中),在基类Activity中的onResume方法中,可以取出SharedPreferences中的用户所设置的App亮度值,然后changeAppBrightness()方法以实现每个当前屏幕的亮度调节。

 总体说来,通过设置当前屏幕(Window)的方式来设置App亮度更加简单有效。

您可能感兴趣的文章:Android编程调节屏幕亮度(背景灯)及保持背景灯常亮的方法Android调节屏幕亮度实现代码android 如何设置开机后屏幕亮度默认值为自动调节使用android隐藏api实现亮度调节的方法android 屏幕亮度调节方法详解


--结束END--

本文标题: Android亮度调节的几种实现方法

本文链接: https://lsjlt.com/news/23392.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android亮度调节的几种实现方法
    最近在做一个App的设置项,亮度调节。真正做时,发现Android亮度调节比预想要复杂一些。其实目前网上已有不少这方面的资料,但有些博文具有一定误导性。在此将这块内容按照自己理...
    99+
    2022-06-06
    方法 Android
  • 使用android隐藏api实现亮度调节的方法
    Android 1.5之后将调节亮度的api隐藏了,不过android的源码中依然有方法可以实现,如下: 代码如下:IPowerManager power = IPowerM...
    99+
    2022-06-06
    方法 api Android
  • android 屏幕亮度调节方法详解
    屏幕亮度自动调节:主要是从Sensor分析之中分离出来分析LIGHT 光线感应器,因此就分析一下自动调节屏幕亮度(手机随着光线的强度自我调节,也就是在亮的光线下屏幕自动调亮一些...
    99+
    2022-06-06
    方法 Android
  • Android调节屏幕亮度实现代码
    调节屏幕亮度时,先设置当前activity亮度,再并保存为系统亮度即可。 1 onCreate()里检查系统亮度并设置seekBar: private void s...
    99+
    2022-06-06
    Android
  • Android 如何实现亮度自动调节
    目录源码版本概述源码梳理1、BrightnessDialog#onCreate:2、这里进行了 BrightnessController 初始化,来看下:3、回到 Brightnes...
    99+
    2024-04-02
  • 怎么调整Win8.1屏幕亮度? 调节屏幕亮度的方法
    Windows8.1是Microsoft公司最新的操作系统,其操作方式和界面和以往系统相比,有了较大变化,今天笔者和大家分享一下如何调整Win8.1系统的屏幕亮度的经验。我们一起开始吧! 1、首先转到Win...
    99+
    2022-06-04
    亮度 屏幕 方法
  • Win8系统 调节电脑屏幕亮度的四种方法
    第一页:Win8系统下调节电脑屏幕亮度的四种方法 第二页:Win8系统下调节电脑屏幕亮度的四种方法   刚接触到win8系统的用户或许会比较生疏,很多设置都找不到,在win8操作系统上有很多设置都有巨大的...
    99+
    2022-06-04
    四种 亮度 电脑屏幕
  • Win7系统一体机调节亮度三种方法分享
    随着计算机快速的发展,家家户户差不多都有电脑了,每天对着电脑,对眼睛的伤害是非常大的,适量的调节屏幕亮度,可以使你的眼睛不那么疲劳。那么 温馨提示:由于每台计算机的显卡厂商的不同,下面分3步讲解 步骤一:英特尔显卡控制台...
    99+
    2023-05-20
    Win7 亮度
  • Win11怎么调节电脑亮度?Win11找不到亮度调节功能解决方法
      Win11无法调节电脑亮度怎么办?有用户在使用电脑的时候,发现自己电脑屏幕的亮度比较低,想要去将电脑屏幕的亮度进行调整。但是在系统设置中,却无法找到系统亮度调节的功能,那么这个情况要怎么去进行解决呢?一起来看看以下的...
    99+
    2023-06-14
    Win11电脑亮度 电脑亮度调节
  • win7亮度调节不见了解决方法
    win7亮度调节不见了怎么办许多小伙伴在使用电脑的过程中,经常会对电脑的一些基础设置进行调节,例如电脑屏幕亮度。有的朋友遇到了win7亮度调节不见了的情况,那你知道win7亮度调节不见了怎么办吗?下面我们一起来看看win7亮度调节不见了解决...
    99+
    2023-07-10
  • Android实现音量调节的方法
    本文实例讲述了Android实现音量调节的方法。分享给大家供大家参考。具体如下: main.xml布局文件: <?xml version="1.0" enco...
    99+
    2022-06-06
    方法 Android
  • Android编程调节屏幕亮度(背景灯)及保持背景灯常亮的方法
    本文实例讲述了Android编程调节屏幕亮度(背景灯)及保持背景灯常亮的方法。分享给大家供大家参考,具体如下: Android写的应用程序其实可以调节屏幕亮度的,查了一下资料发...
    99+
    2022-06-06
    方法 Android
  • win7亮度调节不见了怎么办的解决方法
    有时候屏幕亮度太亮长时间会伤害眼睛,那么我们可以通过系统亮度调节功能调整屏幕亮度,但是发现自己的win7系统无法调节亮度了怎么回事呢?今天小编来跟大家说说win7亮度调节不见了怎么办的解决方法,大家一起来看看吧。方法一、1、如果是台式机,显...
    99+
    2023-07-10
  • win7怎么调屏幕亮度的两种简单方法
    现在有许多屏幕亮度调节工具可供选择,我们可以使用软件快速调节,或者直接使用显示器上的亮度控制功能。请按照以下方法进行快速调整 Win7 屏幕亮度,教程提供了详细指导。Win7系统电脑怎么调节屏幕亮度教程:1、依次点击“计算机—右键—控制面板...
    99+
    2023-07-10
  • Android 实现界面刷新的几种方法
    Android 界面刷新  Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Andr...
    99+
    2022-06-06
    界面 方法 Android
  • Android实现延迟的几种方法小结
    本文实例总结了Android实现延迟的几种方法。分享给大家供大家参考,具体如下: 一、通过Thread new Thread(){ public void run(){ sl...
    99+
    2022-06-06
    小结 方法 Android
  • Android 开发延时调用的几种方法
      我们在安卓开发中,有时候会遇到需要一个程序推迟一段时间执行,也就是延时执行,比如说App首页显示定格3秒,然后自动跳到登录页的情况,这个怎么做呢?本文参...
    99+
    2022-06-06
    调用 方法 Android
  • Android保持屏幕常亮2种实现方法
    方法一: 代码如下: <uses-permission android:name="android.permission.WAKE_LOCK" /> 代码如下:...
    99+
    2022-06-06
    方法 Android
  • 调节苹果Mac电脑屏幕亮度的方法是什么
    这篇文章给大家介绍调节苹果Mac电脑屏幕亮度的方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体方法:1、其实仔细看苹果Mac笔记本键盘,或者iMac附带的苹果蓝牙键盘您应该能够找到答案,F1上面标有亮度的小...
    99+
    2023-06-05
  • Win10屏幕亮度调节无效的解决办法
    WIN10、WIN8好多电脑的显卡驱动安装之后电脑屏幕亮度不能调节,即使调节最大也无效。这是由于Intel的i系列(酷睿i3、i4、i5、i7)CPU集成显卡驱动原因导致,尤其是第一代CPU的核显驱动。另外双显卡的电脑可...
    99+
    2023-06-11
    Win10屏幕亮度 亮度 解决办法 屏幕 Win10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作