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