Android调整屏幕亮度和改变屏幕亮度调整模式的代码

最近有一个调整屏幕亮度的需求,在网上找了各种代码,心乱如麻。不是长篇大论说源码的,就是只言片语就上代码的,关键是代码还不能直接用。

这里面确实是有一些坑,在这里我会把可以用的代码写出来,并且告诉大家坑在哪里。希望可以帮到大家。


经过我的初步分析,屏幕的亮度分为两种情况:

1、全局屏幕亮度,作用于整个手机环境。

2、当前屏幕亮度,仅作用于当前的activity。


我先上第一种情况的代码

[java]  view plain  copy
  1. /** 
  2.  * Created by asus on 2016/12/8. 
  3.  * 屏幕亮度调节器 
  4.  */  
  5. public class ScreenManager {  
  6.   
  7.     /** 
  8.      * 获得当前屏幕亮度的模式 
  9.      * 
  10.      * @return 1 为自动调节屏幕亮度,0 为手动调节屏幕亮度,-1 获取失败 
  11.      */  
  12.     public static int getScreenMode() {  
  13.         int mode = -1;  
  14.         try {  
  15.             mode = Settings.System.getInt(APP.context.getContentResolver(),  
  16.                     Settings.System.SCREEN_BRIGHTNESS_MODE);  
  17.         } catch (Settings.SettingNotFoundException e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.         return mode;  
  21.     }  
  22.   
  23.     /** 
  24.      * 获得当前屏幕亮度值 
  25.      * 
  26.      * @return 0--255 
  27.      */  
  28.     public static int getScreenBrightness() {  
  29.         int screenBrightness = -1;  
  30.         try {  
  31.             screenBrightness = Settings.System.getInt(APP.context.getContentResolver(),  
  32.                     Settings.System.SCREEN_BRIGHTNESS);  
  33.         } catch (Settings.SettingNotFoundException e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.         return screenBrightness;  
  37.     }  
  38.   
  39.     /** 
  40.      * 设置当前屏幕亮度的模式 
  41.      * 
  42.      * @param mode 1 为自动调节屏幕亮度,0 为手动调节屏幕亮度 
  43.      */  
  44.     public static void setScreenMode(int mode) {  
  45.         try {  
  46.             Settings.System.putInt(APP.context.getContentResolver(),  
  47.                     Settings.System.SCREEN_BRIGHTNESS_MODE, mode);  
  48.             Uri uri = Settings.System  
  49.                     .getUriFor("screen_brightness_mode");  
  50.             APP.context.getContentResolver().notifyChange(uri, null);  
  51.         } catch (Exception e) {  
  52.             e.printStackTrace();  
  53.         }  
  54.     }  
  55.   
  56.     /** 
  57.      * 保存当前的屏幕亮度值,并使之生效 
  58.      * 
  59.      * @param paramInt 0-255 
  60.      */  
  61.     public static void setScreenBrightness(int paramInt) {  
  62.         Settings.System.putInt(APP.context.getContentResolver(),  
  63.                 Settings.System.SCREEN_BRIGHTNESS, paramInt);  
  64.         Uri uri = Settings.System  
  65.                 .getUriFor("screen_brightness");  
  66.         APP.context.getContentResolver().notifyChange(uri, null);  
  67.     }  
  68. }  

其中APP是我自定义的Application,context是其引用。至于context是什么我在这里就先不解释了。

代码直接复制下来,稍作修改和导包就可以直接使用。

注意setScreenBrightness()方法需要如下权限

[html]  view plain  copy
  1. <uses-permission android:name="android.permission.WRITE_SETTINGS" />  


然后就是第二种情况的代码

[java]  view plain  copy
  1. public class activityBrightnessManager{  
  2.   
  3.    /** 
  4.      * 设置当前activity的屏幕亮度 
  5.      * 
  6.      * @param paramFloat 0-1.0f 
  7.      * @param activity   需要调整亮度的activity 
  8.      */  
  9.     public static void setActivityBrightness(float paramFloat, Activity activity) {  
  10.         Window localWindow = activity.getWindow();  
  11.         WindowManager.LayoutParams params = localWindow.getAttributes();  
  12.         params.screenBrightness = paramFloat;  
  13.         localWindow.setAttributes(params);  
  14.     }  
  15.   
  16.     /** 
  17.      * 获取当前activity的屏幕亮度 
  18.      * 
  19.      * @param activity 当前的activity对象 
  20.      * @return 亮度值范围为0-0.1f,如果为-1.0,则亮度与全局同步。 
  21.      */  
  22.     public static float getActivityBrightness(Activity activity) {  
  23.         Window localWindow = activity.getWindow();  
  24.         WindowManager.LayoutParams params = localWindow.getAttributes();  
  25.         return params.screenBrightness;  
  26.     }  
  27. }  
坑就在这里:

setActivityBrightness()方法

1、这里设置传入的参数是0-1.0f。

2、一旦传入参数,则当前的亮度属性完全独立,不会受到全局亮度属性的影响,并且没有自动模式。

3、当传入参数-1.0f,当前的activity就又会重新使用全局的亮度属性。


getActivityBrightness()方法

1、在没有设置属性值之前,默认返回的是-1.0。代表使用全局亮度属性。

2、设置属性值之后,返回的是当前属性值。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值