关于调节亮度在小米手机上异常的情况

news/2024/12/5 9:52:01/

最近在做播放器,其中有手指上下滑动的距离来调节播放视频页面的亮度。

首先 来看用到的api,只修改当前页面的亮度

当前页面的亮度,取值范围0-1
/**
* This can be used to override the user's preferred brightness of
* the screen.  A value of less than 0, the default, means to use the
* preferred screen brightness.  0 to 1 adjusts the brightness from
* dark to full bright.
*/
getWindow().getAttributes().screenBrightness

看着是很简单,取到当前页面的screenBrightness值,然后增大或减小就行了,但是screenBrightness的取值可能为默认值-1,因此需要取系统设置的当前亮度值。

获取系统设置的亮度值
Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)官方注释,值范围为0-255
/**
* The screen backlight brightness between 0 and 255.
*/
SCREEN_BRIGHTNESS

所以那就根据取到的当前亮度值除以255得到当前的亮度,再进行亮度的修改。

但是,小米的新版系统(大概是MIUI9和MIUI10),取到的当前亮度值是远大于255的,应该是小米修改了系统亮度的最大值(不知道小米是出于什么原因修改的)。那么怎么才能得到系统的亮度最大值呢,官方是没有这个接口的,小米官网文档也没有,那只能想办法了。看了一些其他APP,例如bilibili,斗鱼,火猫,在我的小米手机上调节亮度时也是突然变为最亮然后再调节,但是MxPlayer却是正常的(不得不说好软件确实做得很细)。那就翻一下源码吧,终于找到了获取最大值的方法。

//核心代码Resources system = Resources.getSystem();
int resId = system.getIdentifier("config_screenBrightnessSettingMaximum", "integer", "android");
if (resId != 0) {return system.getInteger(resId);
}

那么就根据这些资料来完成我们的代码

    private void changeBrightness(float change) {float old = getWindow().getAttributes().screenBrightness;float none = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE; // -1.0fif (old == none) {// 取到了默认值try {int current = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);if (current <= getBrightnessMax()) {old = (current * 1f) / getBrightnessMax();}} catch (Exception ignore) {}}if (old == none|| old <= 0) {// 如果没有取值成功,那么就默认设置为一半亮度,防止突然变得很亮或很暗old = 0.5f;}float newBrightness = MathUtils.clamp(old + change, 0.01f, 1f);WindowManager.LayoutParams params = getWindow().getAttributes();params.screenBrightness = newBrightness;getWindow().setAttributes(params);}/*** 获取最大亮度* @return max*/private int getBrightnessMax() {try {Resources system = Resources.getSystem();int resId = system.getIdentifier("config_screenBrightnessSettingMaximum", "integer", "android");if (resId != 0) {return system.getInteger(resId);}}catch (Exception ignore){}return 255;}

测试,小米正常。

其他手机也测试通过,如果有问题欢迎留言。


http://www.ppmy.cn/news/241224.html

相关文章

小米智能家居技术分析

小米智能家居以小米多功能网关为中心&#xff0c;搭配门窗传感器、人体传感器和无线开关。其中门窗传感器可以配合智能灯泡、空气净化器等设备&#xff0c;完成进门自动开灯、关窗后自动开启空气净化器等功能。人体传感器可以和多功能网关配合&#xff0c;用户检测宠物出门情况…

在小米手机上调节亮度出现失常问题

小米的新版系统&#xff08;大于MIUI9&#xff09;&#xff0c;取到的当前亮度值是远大于255的&#xff0c;应该是小米修改了系统亮度的最大值&#xff08;不知道小米是出于什么原因修改的&#xff09;。所以最大值要根据系统版本动态获取。 public static final int MAX_BRIGH…

Linux下安装docker教程

目录 一、安装CentOS系统 二、安装Docker 1.卸载之前安装过的旧版本&#xff1a; 2.安装docker 3.启动docker 4.配置docker镜像仓库 三、Docker的使用 1.docker容器常用指令&#xff1a; 2.运行案例&#xff1a;docker拉取并运行nignx 3.查看容器日志 一、安装CentOS系…

使用Android Studio开发天气预报APP(使用sqlite数据库)

使用Android Studio开发天气预报APP 今天我来分享一下如何使用Android Studio开发一个天气预报APP。在文中&#xff0c;我们将使用第三方接口获取实时天气数据&#xff0c;并显示在APP界面上。 步骤一&#xff1a;创建新项目 首先&#xff0c;打开Android Studio并创建一个新…

c++函数重载与运算符重载基础

什么是重载 重载&#xff0c;简单说&#xff0c;就是函数或者方法有相同的名称&#xff0c;但是参数列表不相同的情形&#xff0c;这样的同名不同参数的函数或者方法之间&#xff0c;互相称之为重载函数或者方法。 重载的作用&#xff1a;重载函数常用来实现功能类似而所处理的…

一文3000字从0到1用Python做安全测试攻击实战(建议收藏)

在本文中&#xff0c;我们将使用Python进行一次安全测试的实战演练&#xff0c;目标是找出并利用应用程序的安全漏洞。请注意&#xff0c;这个演练仅用于教育和研究目的&#xff0c;切勿将这些技术用于非法活动。 注意&#xff1a;未经授权的攻击是违法的。确保你在拥有明确权…

突破办公瓶颈,推荐5款电脑办公软件

1.AnyTXT AnyTXT是一款搜文件内容的第三方全文搜索工具&#xff0c;速度极快&#xff0c;基本秒出结果。而且右边可以直接预览文件&#xff0c;筛选&#xff0c;复制&#xff0c;翻译等功能丰富&#xff0c;完美替代自带的搜索。 2.Groupy 这是用于快速切换窗口的小型精致工…

锐角云主机linux启动盘制作,开启区块链新生态 Rain将助阵锐角云发布会

近日获悉&#xff0c;全球首台基于区块链的电脑——三角形主机&#xff0c;将于韩国时间3月16日于首尔新罗酒店开启发布会&#xff0c;届时&#xff0c;将有韩国巨星Rain、裴佑熙、Dream catcher等助阵现场。 锐角云预热海报 三角形主机是什么&#xff1f; 三角形主机是由锐角云…