Android 修改屏幕亮度方案

摘要:
强烈推荐Android开发总结文章:欢迎收藏Android开发技术文章摘要。本文主要介绍Android开发中的一些知识点。通过阅读本文,您将获得以下内容:1。在系统设置中获取亮度。2.修改APP界面的屏幕亮度,不会影响其他APP。3.修改系统设置中的屏幕亮度,这将影响所有APP。4.完成代码实现。1系统设置中的亮度系统屏幕亮度值介于之间。获取它的方法很简单,只需调用以下方法即可。

Android 修改屏幕亮度方案第1张

Android 修改屏幕亮度方案第2张

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

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

一、获取系统Settings 中的亮度
二、修改APP界面屏幕亮度,不会影响其他APP
三、修改系统Settings 中屏幕亮度,影响所有APP
四、完整代码实现

Android 修改屏幕亮度方案第3张

一、获取系统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);
	}

修改屏幕亮度包含两种:
1.修改APP界面屏幕亮度,不会影响其他APP
2.修改系统 Settings 中屏幕亮度,影响所有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,需要引导用户手动授权。
引导用户手动授权


	/**
	 * 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() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							Toast.makeText(MainActivity.this,
									"您已拒绝修系统Setting的屏幕亮度权限", Toast.LENGTH_SHORT)
									.show();
						}
					});
			builder.setPositiveButton("去开启",
					new DialogInterface.OnClickListener() {
						@Override
						public 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();
		}
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.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屏幕亮度的方法 屏幕亮度值 200
					ModifySettingsScreenBrightness(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 {

	@Override
	protected 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() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							Toast.makeText(MainActivity.this,
									"您已拒绝修系统Setting的屏幕亮度权限", Toast.LENGTH_SHORT)
									.show();
						}
					});
			builder.setPositiveButton("去开启",
					new DialogInterface.OnClickListener() {
						@Override
						public 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();
		}
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.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屏幕亮度的方法 屏幕亮度值 200
					ModifySettingsScreenBrightness(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);
	}
}

Android 修改屏幕亮度方案第5张

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

微信关注公众号: 程序员Android,领福利

免责声明:文章转载自《Android 修改屏幕亮度方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇golang学习之生成代码文档spring注解开发:常用注解,bean的加载控制,整合第三方技术,Ioc的底层核心原理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Nginx超时timeout配置总结

具体参数解释 Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。 keepalive_timeout HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输...

canva基础绘制曲线(3)

1、canvas绘制贝塞尔曲线 1.1canvas绘制二次贝塞尔曲线 1.1.1绘制二次贝塞尔曲线方法 参数说明:关于绘制方法中每个点的说明见如下图 1.1.2代码实现绘制二次贝塞尔曲线 var mycanvas=document.getElementById('mycanvas'); //获取canvas对象...

Spring AOP之使用注解创建切面

上节中我们已经定义了Performance接口,他是切面中的切点的一个目标对象。那么现在就让我们使用AspectJ注解来定义切面吧。 1.定义切面 下面我们就来定义一场舞台剧中观众的切面类Audience: package com.spring.aop.service.aop; import org.aspectj.lang.ProceedingJoi...

Android实现程序前后台切换效果

太久没动这一块了。借助了下面的文章得到了类似QQ的效果 ,是比较复杂的TABHOST的处理~有需要的Q我。 转了下面的文章: ================ 本文演示如何在Android中实现程序前后台切换效果。    在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识。   我们都知道,一个Activity...

.NET Core授权失败如何自定义响应信息?

前言 在.NET 5之前,当授权失败即403时无法很友好的自定义错误信息,以致于比如利用Vue获取到的是空响应,不能很好的处理实际业务,同时涉及到权限粒度控制到控制器、Action,也不能很好的获取对应路由信息。本文我们来看看在.NET 5中为何要出现针对授权失败的中间件接口?它是如何一步步衍生出来的呢?以及对于授权失败根据实际需要如何自定义响应错误,以及...

《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

1、前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑。但是在ArcGIS Runtime SDK for Android的版本中并没有提供类似的功能,实现过程相对较复杂。(10.2.8及以下版本需要用户自定义扩展...