前言
在Android开发过程中,我们时不时会涉及到屏幕亮度调节问题,为的是增加用户体验。
那么今天就来讲讲屏幕亮度设置的问题吧。基于屏幕亮度调节问题,我封装了一个工具类——ScreenBrightUtil
今天涉及知识点:
- 封装
ScreenBrightUtil
的初衷 -
ScreenBrightUtil
方法介绍 -
ScreenBrightUtil
在Activity
中的运用 - 效果图和项目结构图
- 基于屏幕亮度获取的思考
-
ScreenBrightUtil
源码
先来波效果图:
设置屏幕最亮.png
获取屏幕亮度.png
更多精彩内容,请关注微信公众号 "Android进击",大家一起来学习进步吧
Android进击.jpg
一. 封装ScreenBrightUtil的初衷
之所以要封装一个ScreenBrightUtil
类用于处理屏幕亮度调节的问题,是因为这个功能使用比较频繁,特别是在涉及到二维码展示的场景上,为了让调用更方便快捷,于是封装了此工具类。
二. ScreenBrightUtil方法介绍
ScreenBrightUtil
在使用前,需要在Androidmanifast.xml
中添加如下权限:
ScreenBrightUtil
主要有以下几个方法:
/***
* 获取屏幕亮度
*
* 注:屏幕亮度最亮255,最暗0
*/
public static int getScreenBrightness(Context context)
/***
* 设置屏幕亮度
*
* 注:屏幕亮度最亮255,最暗0
*/
public static void setScreenBrightness(int brightness,Context context)
/**设置屏幕最亮**/
public static void setMaxBrightness(Context context)
/**设置屏幕最暗**/
public static void setMinBrightness(Context context)
/***
* 设置屏幕常亮
* 需要在界面调用 "setContentView(R.layout.布局id);" 之前调用。
* @param context
*/
public static void setScreenKeepOn(Context context)
/***
* 清除屏幕常亮
*
* 常在activity的onPause()周期内调用(仅供参考)
* @param context
*/
public static void cancelScreenKeepOn(Context context)
接下来,让我们看看这个类在Activity
中的使用
三. ScreenBrightUtil在Activity中的运用
下面直接贴出ScreenBrightUtil
在Activity
中使用代码:
public class TempActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mTv;
private Button mBtn;
private Button mBtn1;
private Button mBtn2;
private Button mBtn3;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
//初始化控件
initView();
//初始化数据
initData();
//控件监听
setListener();
}
/**初始化控件**/
private void initView(){
mTv=findViewById(R.id.tv);
mBtn=findViewById(R.id.btn);
mBtn1=findViewById(R.id.btn1);
mBtn2=findViewById(R.id.btn2);
mBtn3=findViewById(R.id.btn3);
}
/**初始化数据**/
private void initData(){
}
/**控件监听**/
private void setListener(){
mBtn.setOnClickListener(this);
mBtn1.setOnClickListener(this);
mBtn2.setOnClickListener(this);
mBtn3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn:
//设置亮度
ScreenBrightUtil.setScreenBrightness(150,TempActivity.this);
ToastUtil.shortShow("设置屏幕亮度为: "+150);
break;
case R.id.btn1:
//设置亮度
ScreenBrightUtil.setMinBrightness(TempActivity.this);
ToastUtil.shortShow("设置屏幕最暗");
break;
case R.id.btn2:
//设置亮度
ScreenBrightUtil.setMaxBrightness(TempActivity.this);
ToastUtil.shortShow("设置屏幕最亮");
break;
case R.id.btn3:
int brightness= ScreenBrightUtil.getScreenBrightness(TempActivity.this);
ToastUtil.shortShow("当前屏幕亮度为: "+brightness);
break;
default:
break;
}
}
}
四. 效果图和项目结构图
设置屏幕最亮.png
获取屏幕亮度.png
项目结构图如下:
image.png
五. 基于屏幕亮度获取的思考
经过效果图及代码的使用,我发现一个问题,那就是不论你界面的亮度如何调节,界面亮度如何变化,获取界面亮度的方法getScreenBrightness(TempActivity.this)
获取的数值始终是一个定值。这里我们需要注意的是,其实getScreenBrightness(TempActivity.this)
方法获取的是手机亮度条上的数值。当我们设置屏幕亮度的时候,手机屏幕亮度是改变的,但是手机屏幕上方 的亮度条是没有改变的。所以获取的亮度值就没有改变。这里,我们可以在设置亮度值的时候,将屏幕亮度值存起来,然后再获取屏幕亮度值的时候去读取你存储的亮度值就行了。
六. ScreenBrightUtil源码
ScreenBrightUtil
源码如下: