0
点赞
收藏
分享

微信扫一扫

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


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

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

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

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

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

我先上第一种情况的代码

/**
 * Created by asus on 2016/12/8.
 * 屏幕亮度调节器
 */  
public class ScreenManager {  
  
/**
     * 获得当前屏幕亮度的模式
     *
     * @return 1 为自动调节屏幕亮度,0 为手动调节屏幕亮度,-1 获取失败
     */  
public static int getScreenMode() {  
int mode = -1;  
try {  
            mode = Settings.System.getInt(APP.context.getContentResolver(),  
                    Settings.System.SCREEN_BRIGHTNESS_MODE);  
catch (Settings.SettingNotFoundException e) {  
            e.printStackTrace();  
        }  
return mode;  
    }  
  
/**
     * 获得当前屏幕亮度值
     *
     * @return 0--255
     */  
public static int getScreenBrightness() {  
int screenBrightness = -1;  
try {  
            screenBrightness = Settings.System.getInt(APP.context.getContentResolver(),  
                    Settings.System.SCREEN_BRIGHTNESS);  
catch (Settings.SettingNotFoundException e) {  
            e.printStackTrace();  
        }  
return screenBrightness;  
    }  
  
/**
     * 设置当前屏幕亮度的模式
     *
     * @param mode 1 为自动调节屏幕亮度,0 为手动调节屏幕亮度
     */  
public static void setScreenMode(int mode) {  
try {  
            Settings.System.putInt(APP.context.getContentResolver(),  
                    Settings.System.SCREEN_BRIGHTNESS_MODE, mode);  
            Uri uri = Settings.System  
"screen_brightness_mode");  
null);  
catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
/**
     * 保存当前的屏幕亮度值,并使之生效
     *
     * @param paramInt 0-255
     */  
public static void setScreenBrightness(int paramInt) {  
        Settings.System.putInt(APP.context.getContentResolver(),  
                Settings.System.SCREEN_BRIGHTNESS, paramInt);  
        Uri uri = Settings.System  
"screen_brightness");  
null);  
    }  
}


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

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

setScreenBrightness()方法需要如下权限


<uses-permission android:name="android.permission.WRITE_SETTINGS" />



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


public class activityBrightnessManager{  
  
/**
     * 设置当前activity的屏幕亮度
     *
     * @param paramFloat 0-1.0f
     * @param activity   需要调整亮度的activity
     */  
public static void setActivityBrightness(float paramFloat, Activity activity) {  
        Window localWindow = activity.getWindow();  
        WindowManager.LayoutParams params = localWindow.getAttributes();  
        params.screenBrightness = paramFloat;  
        localWindow.setAttributes(params);  
    }  
  
/**
     * 获取当前activity的屏幕亮度
     *
     * @param activity 当前的activity对象
     * @return 亮度值范围为0-0.1f,如果为-1.0,则亮度与全局同步。
     */  
public static float getActivityBrightness(Activity activity) {  
        Window localWindow = activity.getWindow();  
        WindowManager.LayoutParams params = localWindow.getAttributes();  
return params.screenBrightness;  
    }  
}


坑就在这里:

setActivityBrightness()方法

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

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

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

getActivityBrightness()方法

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

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

举报

相关推荐

0 条评论