Android设置/获取屏幕亮度

前言

在Android开发过程中,我们时不时会涉及到屏幕亮度调节问题,为的是增加用户体验。
那么今天就来讲讲屏幕亮度设置的问题吧。基于屏幕亮度调节问题,我封装了一个工具类——ScreenBrightUtil

今天涉及知识点:

  1. 封装ScreenBrightUtil的初衷
  2. ScreenBrightUtil方法介绍
  3. ScreenBrightUtilActivity中的运用
  4. 效果图和项目结构图
  5. 基于屏幕亮度获取的思考
  6. 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中的运用

下面直接贴出ScreenBrightUtilActivity中使用代码:

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源码如下:

你可能感兴趣的:(Android设置/获取屏幕亮度)