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

yechaoa 2021-01-05 16:46:46 280 收藏 1 分类专栏: Android 知识点 Android Demo 文章标签: 屏幕亮度 screenBrightnes Settings android canWrite 最后发布:2021-01-05 16:46:46 首次发布:2021-01-05 16:46:46 版权 Flutter 开发实战 Flutter 开发实战,精选重难点。 yechaoa 订阅博主

效果


修改系统屏幕亮度这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到。

emmm 效果图好像看不出来变化。。不过不是很重要。。

操作拆解

上图中可以看到,分别有加减按钮seekbar来控制亮度。

后面会涉及到相关的事件。

获取系统屏幕亮度

    /**     * 获取系统屏幕亮度(0-255)     */    private fun getScreenBrightness(): Int {                  try {                      return Settings.System.getInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS)        } catch (e: SettingNotFoundException) {                      e.printStackTrace()        }        return 0    }                                                                            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

注意,这里的返回值是0-255区间的。

定义两个参数:

  • private var mScreenBrightness: Int = 0 //当前屏幕亮度
  • private var ratio: Int = 25 //每次加减的比例

因为返回值最大是255,假设亮度调节是10档,每次加减1档大约是25,这个精度可以自己控制。

设置当前应用屏幕亮度,只当前有效

加减按钮操作

        btn_add.setOnClickListener {                      if (mScreenBrightness < (255 - ratio)) {                          mScreenBrightness += ratio            } else {                          mScreenBrightness = 255            }            setWindowBrightness(mScreenBrightness)            updateNum(mScreenBrightness)        }
    btn_reduce.setOnClickListener {        if (mScreenBrightness > ratio) {            mScreenBrightness -= ratio        } else {            mScreenBrightness = 1        }        setWindowBrightness(mScreenBrightness)        updateNum(mScreenBrightness)    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

如果设置亮度的值大于255了,不会报错,但是会回到初始值,所以加减操作的时候要判断一下最大值最小值。

接下来看一下核心方法setWindowBrightness

    /**     * 设置当前应用屏幕亮度,只当前有效     */    private fun setWindowBrightness(brightness: Int) {             val window = window        val lp = window.attributes        lp.screenBrightness = brightness / 255.0f        window.attributes = lp    }                          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

很简单,设置window的属性即可。
这个只会对当前页面有效,返回页面或退到后台,屏幕亮度都会恢复到初始值状态。

updateNum方法是更新页面显示:

    /**     * 更新页面显示     */    private fun updateNum(mScreenBrightness: Int) {             //转float 取四舍五入        val i: Int = (mScreenBrightness / (ratio.toFloat())).roundToInt()        tv_brightness.text = i.toString()        seekBar.progress = i    }                          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

其实到这里,已经能满足大部分的需求了。

Github: https://github.com/yechaoa/BrightnessAndVolume

设置系统屏幕亮度,影响所有页面和app

前面讲到的其实是单页面的亮度设置,也可以修改系统的屏幕亮度,即影响所有的页面和app,一般不会有这种操作。
这也涉及到一个高级隐私权限,是否允许修改系统设置,且需要在app设置页面手动授权

且需要先在manifest中添加:

    <!-- 修改系统屏幕亮度 -->    <uses-permission        android:name="android.permission.WRITE_SETTINGS"        tools:ignore="ProtectedPermissions" />                          
  • 1
  • 2
  • 3
  • 4

这里分几个小步骤:

  • 判断权限
  • 有则修改亮度
  • 无则引导授权

seekBar操作

        seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {                 override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {                     Log.i("onProgressChanged----", "" + progress)                mScreenBrightness = progress * ratio                //判断是否有修改系统设置权限                if (Settings.System.canWrite(this@BrightnessActivity)) {                         setScreenBrightness(mScreenBrightness)                    updateNum(mScreenBrightness)                } else {                         Toast.makeText(this@BrightnessActivity, "没有修改权限", Toast.LENGTH_SHORT).show()                    // 打开允许修改系统设置权限的页面                    val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:$packageName"))                    startActivityForResult(intent, mRequestCode)                }            }
        override fun onStartTrackingTouch(seekBar: SeekBar?) {        }        override fun onStopTrackingTouch(seekBar: SeekBar?) {        }    })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

Settings.System.canWrite来判断是否已授权。

已授权

setScreenBrightness方法:

    /**     * 设置系统屏幕亮度,影响所有页面和app     * 注意:这种方式是需要手动权限的(android.permission.WRITE_SETTINGS)     */    private fun setScreenBrightness(brightness: Int) {             try {                 //先检测调节模式            setScreenManualMode()            //再设置            Settings.System.putInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS, brightness)        } catch (e: SettingNotFoundException) {                 e.printStackTrace()        }    }                          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

我们看到在设置之前,还有一步操作是先检测调节模式,因为如果当前亮度是自动调节的,需要改为手动才可以。

    /**     * 设置系统亮度调节模式(SCREEN_BRIGHTNESS_MODE)     * SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节     * SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节     */    private fun setScreenManualMode() {             try {                 //获取当前系统亮度调节模式            val mode = Settings.System.getInt(this.contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE)            //如果是自动,则改为手动            if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {                     Settings.System.putInt(                    this.contentResolver,                    Settings.System.SCREEN_BRIGHTNESS_MODE,                    Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL                )            }        } catch (e: SettingNotFoundException) {                 e.printStackTrace()        }    }                          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

亮度调节模式

  • SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节
  • SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节

未授权

未授权的情况下,要提示并引导用户去授权

Toast.makeText(this@BrightnessActivity, "没有修改权限", Toast.LENGTH_SHORT).show()// 打开允许修改系统设置权限的页面val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:$packageName"))startActivityForResult(intent, mRequestCode)                          
  • 1
  • 2
  • 3
  • 4

同时,检测返回结果并处理即可

    /**     * 处理返回结果     */    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {             super.onActivityResult(requestCode, resultCode, data)        if (requestCode == mRequestCode) {                 if (Settings.System.canWrite(this@BrightnessActivity)) {                     setScreenBrightness(mScreenBrightness)            } else {                     Toast.makeText(this@BrightnessActivity, "拒绝了权限", Toast.LENGTH_SHORT).show()            }        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

以上可以看到,不管是改模式还是改亮度,都是用的Settings.System.putInt方法,也就是修改了系统的设置,从而达到所有页面和app使用同一亮度的需求。

监听系统亮度变化

以上两种方式其实都是我们手动去改的,那如果用户自己去改变了亮度呢,我们页面理应也要做出相应的改变,所以,还需要去监听系统的亮度变化。

这里也分几个小步骤:

  • 注册监听
  • 处理变化
  • 注销监听

注册监听

    /**     * 注册监听 系统屏幕亮度变化     */    private fun registerContentObserver() {             this.contentResolver?.registerContentObserver(            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),            true,            mBrightnessObserver        )    }                          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

处理变化

    /**     * 监听系统亮度变化     */    private val mBrightnessObserver = object : ContentObserver(Handler(Looper.getMainLooper())) {             override fun onChange(selfChange: Boolean) {                 super.onChange(selfChange)            try {                     this@BrightnessActivity.contentResolver?.let {                         mScreenBrightness = Settings.System.getInt(it, Settings.System.SCREEN_BRIGHTNESS)                    updateNum(mScreenBrightness)                    setWindowBrightness(mScreenBrightness)                }            } catch (e: SettingNotFoundException) {                     e.printStackTrace()            }        }    }                          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

注销监听

    override fun onDestroy() {             super.onDestroy()        //注销监听        this.contentResolver?.unregisterContentObserver(mBrightnessObserver)    }                          
  • 1
  • 2
  • 3
  • 4
  • 5

ok,至此关于修改屏幕亮度的讲解就全部结束了,如果对你有用,就点个赞吧^ - ^

Github

https://github.com/yechaoa/BrightnessAndVolume

Android 修改 系统 屏幕 亮度 zkk的博客 03-30 1万+ [toc] Android 系统亮度值取值范围在0~255,数据类型是int型. 下面分两步介绍: 介绍关于 系统 亮度的一些常用的方法 结合一个案例说说 一. 系统 亮度常用的方法1. 获得当前 屏幕 亮度的模式/** 2. SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节 屏幕 亮度 3. SCREEN_BRIGHTNESS_MODE_MANUAL=0 为手动调节 android 系统 亮度调整改变 屏幕 亮度(只对手动调节 屏幕 亮度生效) zs20082012的博客 03-22 829 在oncreat函数添加注册 监听函数,当 监听系统 亮度改变时,就保存当前的 屏幕 亮度值,并使之生效 ,注意只对手动调节 屏幕 亮度生效;当手机 系统 亮度为自动调节时是没法控制的

private void monitorBright(){
try{
this.getContentResolver().registerContentObserver(Settings.System.getUri…


     插入表情                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              添加代码片还能输入1000个字符“速评一下”
  • 爱码士strive_day:好好学习,又到了面向博客学习的时间了,文章很棒,谢谢分享3小时前回复举报
  • 爱码士ITKaven:写的不错,顶个贴,点个赞,嘿嘿!3小时前回复举报
  • <
  • 1
  • >
Android之调节 屏幕 亮度 Lindroid的博客 03-17 6070 1、需求分析 在使用微信或者支付宝的付款码支付时,如果你点击放大付款码,就会跳转到一个新的页面去显示大尺寸的付款码,而且你会发现 屏幕变亮了,这样会便于扫码机识别你的付款码。当你付款成功退出付款码放大的界面后, 屏幕就会恢复到原先的 亮度。我很早就注意到了这点,所以当我自己的项目需要做二维码点击放大功能时,我也在放大的同时把 屏幕的界面调亮一点。尽管我当时比较轻松地实现了这个功能,但是当我编写 屏幕 亮度工具... Android 改变 屏幕 亮度时需添加权限 琼恩 01-09 1641 做视频播放的小应用时,想通过上下滑动来改变 屏幕 亮度,就是不能成功.我忘记了加权限了android:name=" android.permission.WRITE_SETTINGS" /> ... 监听 屏幕 亮度变化_jifashihan的博客_ android 亮度 监听 12-26 /** * 监听 屏幕 亮度变化 */privateContentObserver mBrightnessObserver=newContentObserver(newHandler()){@OverridepublicvoidonChange(booleanselfChange){if(!qrCode... Android 修改 屏幕 亮度方案_程序员 Android 12-19 修改 系统Settings中的 屏幕 亮度,由于会影响到所有APP,需要申请 修改Settings的权限android:name=" android.permission.WRITE_SETTINGS"/>,同时需要取消... Android 代码调节 屏幕 亮度 Cricket_7的博客 07-21 694 实现 Android 使用代码调节 屏幕 亮度

实现自动跟随系统亮度

1,实现效果:

2,实现代码

【1】XML文件

<?xml version=“1.0” encoding=“utf-8”?>

android=“http://schemas.android.com/apk/res/android



android调节 屏幕 亮度(包括只 修改应用程序和 修改 系统zy81584的专栏 08-21 1305 一:只改变当前程序 android 屏幕 亮度 (1)方法: lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0( 系统设定)、0.0(暗)~1.0(亮) ※调用处理的地方,例如, Activity.onCreate()等等

代码:
WindowManager.LayoutParams lp = getWindow().getAttr


android调节 屏幕 亮度(包括只 修改应用程序和 修改 系统... 10-22 一:只改变当前程序 android 屏幕 亮度(1)方法: lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0( 系统设定)、0.0(暗)~1.0(亮) ... android调节 屏幕 亮度(包括只 修改应用程序和 修改 系统... 4-4 在子Activity中, 屏幕 亮度不发生改变。因为调节 亮度作用域发生了改变,之前是在Activity里面对 亮度 修改。 而现在是作为子activity对TabActivity或ViewGroup 容器进行 修改android 9.0关于 屏幕 亮度的整理 yyqx1128_wuting的博客 08-05 157 BrightnessController private final DisplayManager mDisplayManager;

private void setBrightness(int brightness) {
mDisplayManager.setTemporaryBrightness(brightness);
}

DisplayManager
private final DisplayManagerGlobal mGlobal;

public vo


Android Screen Brightness 屏幕 亮度 的获取和 修改 Jon.Lo 的专栏 12-25 2104 Android Screen Brightness 屏幕 亮度 的获取和 修改

一、获取系统屏幕亮度
二、修改App屏幕亮度(仅当前应用)
三、修改系统屏幕亮度(所有应用)

一、获取系统屏幕亮度

系统屏幕亮度值在(0~255)之间,获取方法很简单,只需要调用以下方法即可。

/**
* 1.获取系统默认屏幕亮度屏幕亮度值范围(0-255)
* **/



android调节 屏幕 亮度(包括只 修改应用程序和 修改 系统)_N... 8-28 Android Service学习... Nio96 : 放这里主要是区分localservice 和 remoteservice的用法 目录 android调节 屏幕 亮度(包括只 修改应用程序和 修改 系统) Nio96 2014-08-... android7.1默认背光 亮度及编译调试 LoongEmbedded的专栏 05-11 3402 p { margin-bottom: 0.1in; direction: ltr; color: rgb(0, 0, 10); line-height: 120%; text-align: justify; }p.western { font-family: "等线",serif; font-size: 10pt; }p.cjk { font-family: "等线"; font-size: 10 Android 触摸屏交互之手势 监听 晨曦 06-19 604 效果图

前言
2020年,智能手机大行其道,相信不会还有人用着老式的按键手机了吧,而智能手机最大的交互就是手机屏幕,其次的就是音量操作、生物识别(指纹+人脸+瞳孔)、说白了用的最多的是手机的屏幕屏幕与用户之前进行交互,比如打开一个app你是不是要点击屏幕上某一个?有人说我可以用语音去打开,但是你没有想过语音其实只是帮你执行了点击,在手机上不管是玩游戏还是看电影或者是搞学习,都是要使用手机屏幕的,所以你知道屏幕交互有多么重要吗?
正文
屏幕的交互当然首先是触摸,说道触摸就是有一个手势监听,这个是Googl


Android之调节 屏幕 亮度(文末附源码) zxc131405的博客 07-12 118 1、需求分析 在使用微信或者支付宝的付款码支付时,如果你点击放大付款码,就会跳转到一个新的页面去显示大尺寸的付款码,而且你会发现 屏幕变亮了,这样会便于扫码机识别你的付款码。当你付款成功退出付款码放大的界面后, 屏幕就会恢复到原先的 亮度。我很早就注意到了这点,所以当我自己的项目需要做二维码点击放大功能时,我也在放大的同时把 屏幕的界面调亮一点。尽管我当时比较轻松地实现了这个功能,但是当我编写 屏幕 亮度工具... Android调节 屏幕 亮度分析源码 zhangkongzhongyun的专栏 06-18 1805 大家知道在 android中是怎么调节 亮度了吗,接下来刘让我们去看看使用 android中调亮点的代码解析吧

brightness(亮度)是window中的一个属性

修改亮度需要取得window属性

方法为:

?

代码片段,双击复制

01

02

03

    
 WindowManager.L


Android 系统7.0上 屏幕背光流程分析 风花散却隽世间,雪月寥落化雨田 03-02 1万+ Android 系统 屏幕背光流程分析(未完待续) 概述 自动背光初始化 自动背光的初始化 概述最近关于自动背光的问题报的比较多,多是背光不灵敏以及背光调节不正常的问题,并且自动背光也是直接和用户交互的一个模块,对于用户体验有着最直观的影响,所以在此分析一下关于自动背光模块的处理逻辑,以及小米对于自动背光所作的优化,关于后期优化方案,也希望大家能多多建议。自动背光在 android 系统中属于displ 调整APP 亮度,并且最高不高于 系统 亮度实现方案 迷途小顽童 05-15 472 项目新需求,app 亮度进行单独调节,但是调整的最大 亮度不能高于 系统 亮度,接到需求之后,就在考虑实现方案,大致想到了三种方案

直接调整系统亮度

在app中直接调整系统亮度,保存当前系统亮度,然后在activity生命周期中监听回到桌面(这里可在Application中registerActivityLifecycleCallbacks来实现),回到桌面之后调整回原来的系统亮度,切回app的时候再设置成app本身设置的系统亮度

在DecorView外层添加view

对再BaseAct.


三级Linux应用与开发技术考试大纲(2021年版).pdf 12-16 三级Linux应用与开发技术考试大纲(2021年版).pdf python大作业--爬虫(完美应付大作业).zip 06-18 python大作业分享--30多个项目任你选(由于上传大小限制分多个文件上传。爬虫:https://download.csdn.net/download/weixin_43960044/1253338 C/C++程序员实战基础 08-20 ©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页 yechaoa CSDN认证博客专家 CSDN认证企业博客 码龄4年 暂无认证
267
原创
747
周排名
2473
总排名
132万+
访问
等级
1万+
积分
547
粉丝
622
获赞
637
评论
829
收藏
私信 关注

公告

邮箱:yechaoa@gmail.com
Github
玩安卓 Java版
玩安卓 小程序版
玩安卓 Flutter版
玩安卓 Kotlin版

热门文章

  • Android 选择图片、上传图片之PictureSelector 53921
  • 微信小程序 定时器setInterval、setTimeout,简单易用 44516
  • 微信小程序 js中遍历list 36523
  • Gradle升级,Error:Connection timed out: connect. If you are behind an HTTP proxy, please configure 36266
  • 彻底弄明白Gradle相关配置 30015

分类专栏

  • Flutter 开发实战 16篇
  • Flutter 40篇
  • Kotlin 8篇
  • Android 知识点 142篇
  • 微信 小程序 24篇
  • Material Design 16篇
  • 前端 知识点 10篇
  • Android 疑难杂症 71篇
  • Flutter 疑难杂症 7篇
  • Kotlin 疑难杂症
  • Android Studio 18篇
  • Android Demo 27篇
  • 打印机 蓝牙、PC 2篇
  • Bmob后端云 1篇
  • 设计模式 3篇
  • Mac 2篇
  • Axure 产品原型设计 1篇
  • Chrome 2篇
  • eclipse 1篇
  • uni-app 1篇

最新评论

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

    strive_day: 好好学习,又到了面向博客学习的时间了,文章很棒,谢谢分享

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

    ITKaven: 写的不错,顶个贴,点个赞,嘿嘿!

  • Android 选择图片、上传图片之PictureSelector

    fei123dong123: 你好 我在使用时遇到了如下问题 红米 7 android9 api28 在点击拍照 点击确定后 右下角完成显示的是选择了一个 但是相册里面看不到选择的那个照片 其他手机是正常的

  • 【开源项目】Kotlin版 玩安卓

    yechaoa: 大佬

  • 【开源项目】Kotlin版 玩安卓

    chen.yu: 大佬

最新文章

  • Android 修改系统音量及监听
  • Android 硬布局item的高级写法
  • Android 打开网页之CustomTabs
2021年 2篇 2020年 28篇 2019年 82篇 2018年 82篇 2017年 86篇 2016年 21篇

目录

  1. 效果
  2. 操作拆解
  3. 获取系统屏幕亮度
  4. 设置当前应用屏幕亮度,只当前有效
    1. 加减按钮操作
  5. 设置系统屏幕亮度,影响所有页面和app
    1. seekBar操作
    2. 已授权
    3. 未授权
  6. 监听系统亮度变化
    1. 注册监听
    2. 处理变化
    3. 注销监听
  7. Github

更多相关文章

  1. Android屏幕密度的深刻理解
  2. 【Android(安卓)学习】之二维码扫描开发(闪光灯功能)
  3. Android(安卓)Webview适配屏幕宽度
  4. Android(安卓)Studio(七):项目从Eclipse到Android(安卓)Studio迁
  5. 创建 cocos2d-x+lua for android 步骤
  6. Android下修改SeekBar样式
  7. Android实现透明式状态栏
  8. Android应用程序四大组件
  9. Android初学习 - android:sharedUserId="android.uid.system" 应

随机推荐

  1. android播放器(music player)源码分析1-Ser
  2. 布局概述之相对布局RelativeLayout
  3. Android的Task和Activity(一)
  4. Android高手应该精通哪些内容?
  5. Android开发艺术探索——第二章:IPC机制(上
  6. Android实现退出时关闭所有Activity的方
  7. Android(安卓)8.0目录介绍
  8. Android(安卓)- 多线程 - AsyncTask
  9. #Android源代码#android:onClick属性的底
  10. 详解Android(安卓)TextView属性ellipsize