android调节系统亮度的方法

android调节系统亮度的方法

Android系统允许APP直接调节当前屏幕亮度,但是却不能直接调节系统亮度,这需要询问用户和申请权限,比较麻烦。不过并不是没有解决办法,我们可以修改框架层的代码绕开这个步骤。这里提供一种使用广播的方式直接调节系统亮度的办法。

思路:
在应用层设置一个广播,把我们改变的亮度值发送出去。在框架层设置一个接收器,接收应用层发送过来的亮度值,然后通过调用设置亮度的方法改变系统亮度,这样我们就直接的改变系统亮度了,无需做其他工作。

--------------------实现------------------------

第一步:
找到控制亮度的frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java文件,然后注册一个接收器,这里放在BrightnessController类的构造方法里,能通过上下文context调用接收器,在创建对象时注册接收器。

 public BrightnessController(Context context, ToggleSlider control) {
        mContext = context;
        ……
        //注册接收器
        context.registerReceiver(brightnessReceiver, new IntentFilter("com.my.setBrightness"));
  }      

第二步
在BrightnessController类里,添加设置和保存亮度的方法。

 /**
  *设置亮度值和保存亮度状态
  */
    private void setBackBrightness(Context context,int brightnessValues){
        Log.i(TAG,"setBackBrightness");
        setBrightness(brightnessValues);
        saveBrightness(context, brightnessValues);
    }

    /**
     * 保存亮度设置状态,然后退出也能保持设置状态
     */
    private void saveBrightness(Context context, int brightness){

        Log.i(TAG,"saveBrightness");
        ContentResolver resolver = context.getContentResolver();
        Uri uri = android.provider.Settings.System.getUriFor("screen_brightness");

        Settings.System.putInt(resolver, "screen_brightness", brightness);
        resolver.notifyChange(uri, null);
    }

其中setBrightness(brightnessValues)方法是调用系统原有的设置亮度的方法。

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

第三步
在BrightnessController类里,通过广播接收亮度值和调节亮度

/**
     *使用广播接收器接收上层发送过来的数据作为调节系统亮度的值
     */
    private final BroadcastReceiver brightnessReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            setBackBrightness(context,intent.getIntExtra("brightnessValues",0));
        }
    };

第四步
在应用层,也就是APP的活动里发送广播,注意广播和接收器的action,发送和接收数据方法的key必须要一致。

//发送广播
private void sendBroadcast(int values){
        Intent intent = new Intent("com.my.setBrightness");
        intent.putExtra("brightnessValues",values);
        sendBroadcast(intent);
    }

android调节当前屏幕亮度的方法:
https://blog.csdn.net/jppipai/article/details/121028574?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值