Android 修改屏幕背光方案

news/2024/9/23 4:36:41/

640?wx_fmt=gif

640?wx_fmt=gif

极力推荐Android 开发大总结文章:欢迎收藏Android 开发技术文章大总结

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、获取系统Settings 中的亮度

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

/*** 1.获取系统默认屏幕亮度值 屏幕亮度值范围(0-255)* **/private int getScreenBrightness(Context context) {ContentResolver contentResolver = context.getContentResolver();int defVal = 125;return Settings.System.getInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS, defVal);}

修改屏幕亮度包含两种:APPSettings 中屏幕亮度,影响所有APP.

二,修改APP界面屏幕亮度,不会影响其他APP

修改自身 APP 亮度很简单,只需要在Activity OnCreate方法调用如下代码即可。

    /*** 2.设置 APP界面屏幕亮度值方法* **/private void setAppScreenBrightness(int birghtessValue) {Window window = getWindow();WindowManager.LayoutParams lp = window.getAttributes();lp.screenBrightness = birghtessValue / 255.0f;window.setAttributes(lp);}

三、修改系统Settings 中屏幕亮度,影响所有APP

修改系统 Settings 中的屏幕亮度,由于会影响到所有APP,需要申请修改Settings的权限<uses-permission * android:name="android.permission.WRITE_SETTINGS"/>,同时需要取消光感自动调节屏幕亮度的功能,设置为手动调节模式,否则光感传感器会随着光照强度的变化修改系统屏幕亮度,并且非系统签名的APP,需要用户手动授权后才可以修改背光亮度。

关闭光感,设置手动调节背光模式实现方法如下:
    /*** 3.关闭光感,设置手动调节背光模式** SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节屏幕亮度模式值为1** SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节屏幕亮度模式值为0* **/public void setScreenManualMode(Context context) {ContentResolver contentResolver = context.getContentResolver();try {int mode = Settings.System.getInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS_MODE);if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {Settings.System.putInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS_MODE,Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);}} catch (Settings.SettingNotFoundException e) {e.printStackTrace();}}
非系统签名应用,引导用户手动授权修改Settings 权限

非系统签名应用,无法直接修改Settings,需要引导用户手动授权。

640?wx_fmt=other

引导用户手动授权

/*** 4.非系统签名应用,引导用户手动授权修改Settings 权限* **/private static final int REQUEST_CODE_WRITE_SETTINGS = 1000;private void allowModifySettings() {// Settings.System.canWrite(MainActivity.this)// 检测是否拥有写入系统 Settings 的权限if (!Settings.System.canWrite(MainActivity.this)) {AlertDialog.Builder builder = new AlertDialog.Builder(this,android.R.style.Theme_Material_Light_Dialog_Alert);builder.setTitle("请开启修改屏幕亮度权限");builder.setMessage("请点击允许开启");// 拒绝, 无法修改builder.setNegativeButton("拒绝",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"您已拒绝修系统Setting的屏幕亮度权限", Toast.LENGTH_SHORT).show();}});builder.setPositiveButton("去开启",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 打开允许修改Setting 权限的界面Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:"+ getPackageName()));startActivityForResult(intent,REQUEST_CODE_WRITE_SETTINGS);}});builder.setCancelable(false);builder.show();}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// Settings.System.canWrite方法检测授权结果if (Settings.System.canWrite(getApplicationContext())) {// 5.调用修改Settings屏幕亮度的方法 屏幕亮度值 200ModifySettingsScreenBrightness(MainActivity.this, 200);Toast.makeText(this, "系统屏幕亮度值" + getScreenBrightness(this),Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "您已拒绝修系统Setting的屏幕亮度权限",Toast.LENGTH_SHORT).show();}}}}
修改Setting 中屏幕亮度值 实现

拥有系统签名的应用可以直接调用此方法修改系统屏幕亮度,非系统签名应用,只有用户授权后才可以修改。

/*** 5.修改Setting 中屏幕亮度值** 修改Setting的值需要动态申请权限 <uses-permission* android:name="android.permission.WRITE_SETTINGS"/>* **/private void ModifySettingsScreenBrightness(Context context,int birghtessValue) {// 首先需要设置为手动调节屏幕亮度模式setScreenManualMode(context);ContentResolver contentResolver = context.getContentResolver();Settings.System.putInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS, birghtessValue);}

四、完整代码实现

完整代码实现如下:

package com.example.test;import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//获取屏幕亮度getScreenBrightness(this);Toast.makeText(this, "系统屏幕亮度值" + getScreenBrightness(this),Toast.LENGTH_SHORT).show();// 设置APP 屏幕亮度后,系统Setting亮度将对此app 不生效setAppScreenBrightness(100);allowModifySettings();setContentView(R.layout.activity_main);}/*** 1.获取系统默认屏幕亮度值 屏幕亮度值范围(0-255)* **/private int getScreenBrightness(Context context) {ContentResolver contentResolver = context.getContentResolver();int defVal = 125;return Settings.System.getInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS, defVal);}/*** 2.设置 APP界面屏幕亮度值方法* **/private void setAppScreenBrightness(int birghtessValue) {Window window = getWindow();WindowManager.LayoutParams lp = window.getAttributes();lp.screenBrightness = birghtessValue / 255.0f;window.setAttributes(lp);}/*** 3.关闭光感,设置手动调节背光模式** SCREEN_BRIGHTNESS_MODE_AUTOMATIC 自动调节屏幕亮度模式值为1** SCREEN_BRIGHTNESS_MODE_MANUAL 手动调节屏幕亮度模式值为0* **/public void setScreenManualMode(Context context) {ContentResolver contentResolver = context.getContentResolver();try {int mode = Settings.System.getInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS_MODE);if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {Settings.System.putInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS_MODE,Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);}} catch (Settings.SettingNotFoundException e) {e.printStackTrace();}}/*** 4.非系统签名应用,引导用户手动授权修改Settings 权限* **/private static final int REQUEST_CODE_WRITE_SETTINGS = 1000;private void allowModifySettings() {// Settings.System.canWrite(MainActivity.this)// 检测是否拥有写入系统 Settings 的权限if (!Settings.System.canWrite(MainActivity.this)) {AlertDialog.Builder builder = new AlertDialog.Builder(this,android.R.style.Theme_Material_Light_Dialog_Alert);builder.setTitle("请开启修改屏幕亮度权限");builder.setMessage("请点击允许开启");// 拒绝, 无法修改builder.setNegativeButton("拒绝",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"您已拒绝修系统Setting的屏幕亮度权限", Toast.LENGTH_SHORT).show();}});builder.setPositiveButton("去开启",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 打开允许修改Setting 权限的界面Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:"+ getPackageName()));startActivityForResult(intent,REQUEST_CODE_WRITE_SETTINGS);}});builder.setCancelable(false);builder.show();}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// Settings.System.canWrite方法检测授权结果if (Settings.System.canWrite(getApplicationContext())) {// 5.调用修改Settings屏幕亮度的方法 屏幕亮度值 200ModifySettingsScreenBrightness(MainActivity.this, 200);Toast.makeText(this, "系统屏幕亮度值" + getScreenBrightness(this),Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "您已拒绝修系统Setting的屏幕亮度权限",Toast.LENGTH_SHORT).show();}}}}/*** 5.修改Setting 中屏幕亮度值** 修改Setting的值需要动态申请权限 <uses-permission* android:name="android.permission.WRITE_SETTINGS"/>* **/private void ModifySettingsScreenBrightness(Context context,int birghtessValue) {// 首先需要设置为手动调节屏幕亮度模式setScreenManualMode(context);ContentResolver contentResolver = context.getContentResolver();Settings.System.putInt(contentResolver,Settings.System.SCREEN_BRIGHTNESS, birghtessValue);}
}

640?wx_fmt=jpeg

640?wx_fmt=other

长按识别二维码,领福利

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

640?wx_fmt=other

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

640?wx_fmt=jpeg

小礼物走一走,来简书关注我


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

相关文章

Android原生调节屏幕背光流程

Android 5.1调节背光流程 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 by-sa 版权协议&#xff0c;转载请附上原文出处链接和本声明。 https://mp.csdn.net/mdeditor/99670972 目录 1、启动相关服务(PMS,LightService,DMS) 2、背光修改Code执行流程 3…

数字脉冲调光(用于手机或平板电脑等设备的背光调节原理)

数字脉冲调光是一种利用脉冲个数的不同来实现背光调节的 调光方法&#xff0c;此种方法占用一个普通的GPIO口&#xff0c;调光时通过向 背光IC的EN端口发送相应个数的脉冲来实现相应阶数的背光调 节&#xff0c;一般有16阶可调&#xff0c;所发脉冲要满足IC相应的要求。 下图为…

android修改自动背光,android 背光控制

echo 23 > /sys/devices/platform/atmel_lcdfb.0/backlight/backlight/brightness android 源代码 http://blog.chinaunix.net/u1/49742/showart_2077813.html android 知识总结 http://www.limodev.cn/ Android 背光的控制&#xff1a; 屏幕背光设置 packages/apps/Setting…

android lcd 背光控制流程

此文章是网上看到的&#xff0c;在MTK平台基础上的背光控制流程的分析。个人觉得写得比较详细&#xff0c;于是截取部分内容转载出来。 不过话说在前头&#xff0c;对于lcd而言&#xff0c;决定显示效果的有几个因素&#xff1a;pwm&#xff0c;gama&#xff08;屏幕灰度&#…

LCD背光驱动 --Backlight

显示屏按其显示原理大致可分为CRT(显像管)、LCD(液晶)及OLED三类&#xff0c;从市场应用看&#xff0c;手机中使用的显示屏主流是LCD&#xff0c;OLED只在翻盖机的小屏中占有少量份额&#xff0c;而CRT在手机中没有用到。 LCD本身不会发光&#xff0c;要想让其显示所要数…

Android Q自动背光曲线调节

诺基亚客户对背光曲线有很明确需求&#xff0c;因此就将系统的背光曲线部分看了下&#xff0c;现将这个流程总结出来。 一&#xff0c;概念明确 背光的调节有与光相关的概念&#xff0c;需要首先明确下&#xff0c;后面我们会用到这些概念。 1&#xff0c;环境光&#xff1a;是…

android关闭背光

android关闭背光 Android11方法1&#xff08;可能关不完还是会有点亮&#xff09;&#xff1a;方法2&#xff08;这个涉及系统权限&#xff09;&#xff1a;2.1调试&#xff1a;2.2处理问题&#xff1a;2.2.1 处理核心代码2.2.2 验证 遇到问题2.2.3 验证 遇到问题检查要操作文件…

Android屏幕背光调整机制

扩展一个硬件&#xff08;比如LED、蓝牙、传感器等&#xff09;&#xff0c;至少需要硬件、驱动、驱动交互模块。至于系统的层面如何把系统库加入自己的体系里面去&#xff0c;就是操作系统自己的事了。这里分析一下以背光调整为例Android。 源码在这里&#xff1a;http://code…