关于Android屏幕亮度的一个需求

private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {

@Override

public void onChange(boolean selfChange) {

// 当前系统的屏幕亮度(当用户改变了系统亮度后,会回调到该方法)

int currentValue = Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);

}

};

最终解决!

在监听里,当监听到用户第一次主动去修改屏幕亮度时,调用setActivityBrightness(2)让我们设置的屏幕亮度失效即可。

//在进入Act的时候调用

setActivityBrightness(1.0f)

//将当前Act的亮度设置为最亮(这个时候用户修改系统亮度是没法修改的)

//然后在刚才的监听里这样写

private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {

@Override

public void onChange(boolean selfChange) {

//isSettingSystemLight为标记,只有当用户第一次主动修改屏幕亮度后设置,再次碰触就直接抛出,已减少性能损耗。

if (isSettingSystemLight) {

//如果标记用户已主动修改过屏幕亮度,就抛出

return;

}

//这里随便什么值,只要大于1.0f即可(这个时候当前Act的亮度会跟随用户的修改而变化)

setActivityBrightness(2);

isSettingSystemLight = true;

}

};

好了,讲到这里其实可以实现需求了,如果还有兴趣的可以向下看。

原理是什么?

具体什么原理,我也不知道,但是可以知道的是,在上边的监听模块,我本来的逻辑是,在拿到用户修改了系统亮度的回调后,我再调用

//其中currentValue是回调里获取的当前系统亮度,最大为255。然后出除一下,就可以得到当前的值了

setActivityBrightness(currentValue % 255)

一波操作后,测试了一下,发现,可以用哎。

然后又测试了一下,吧亮度调到了最低,发现,嗯???不对啊。

其实是我搞错了,我写成了

//这里应该是除以,但是我写成了取余,闹了个小乌龙,但是也解决了大问题。

setActivityBrightness(currentValue / 255)

然后我一想,这波操作?为什么屏幕亮度还会变化?

最终我灵机一动,在拿到回调后,吧屏幕值写死,成255看你还变不变。

可想而知,当前Act还是会跟随系统变化。

然后我感觉,这和我的方法好像没多大关系啊?

恍然大悟!

最终,我将回调屏蔽掉。在设置完亮度1f后,直接设置个999。

果不其然,如我所料。

/*

  • 当setActivityBrightness()方法中的screenBrightness 值大于 1f 时,之前的设置将会失效。

  • */

Window localWindow = this.getWindow();

WindowManager.LayoutParams params = localWindow.getAttributes();

params.screenBrightness = paramFloat;

localWindow.setAttributes(params);

}

也就是说:当值大于1f时,比如999,系统不知道该怎么设置了,就会判定设置无效吧当用户再次操作熊亮度时,当前Act也就会跟着系统的亮度而变化了。
没想到一个小乌龙还帮我解决了问题,佩服佩服!
阿里P6P7【安卓】进阶资料分享+加薪跳槽必备面试题

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
不断提升的资深开发者,这些资料都将为你打开新的学习之门**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值