usniyo 2012-10-11 05:40 采纳率: 0%
浏览 12107
已结题

android 关于调节屏幕亮度的问题

请问,设置屏幕亮度的值的范围是多少?网上有说是从0到1,我在设置时,从0.49到1.0这个范围内,每增加或减少0.01,亮度就会改变。但在0.0到0.48这个范围内,值的改变并不影响屏幕亮度,这是为何?

public static void brightnessPreview(Activity activity, float brightness)
{
    Window window = activity.getWindow();
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.screenBrightness = brightness;
    window.setAttributes(lp);
}
  • 写回答

2条回答 默认 最新

  • usniyo 2012-12-05 15:16
    关注

    这是我自己封装的:

    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.Context;
    import android.provider.Settings;
    import android.provider.Settings.SettingNotFoundException;
    import android.view.Window;
    import android.view.WindowManager;
    
    public class ScreenBrightnessTool
    {
        /**
         * Activty自动调节亮度模式
         */
        public static final int ACTIVITY_BRIGHTNESS_AUTOMATIC = -1;
        /**
         * 自动调节模式
         */
        public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
        /**
         * 手动调节模式
         */
        public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
        /**
         * 默认亮度
         */
        public static final int SCREEN_BRIGHTNESS_DEFAULT = 75;
        /**
         * 最大亮度
         */
        public static final int MAX_BRIGHTNESS = 100;
        /**
         * 最小亮度
         */
        public static final int MIN_BRIGHTNESS = 0;
    
        private static final int mMaxBrighrness = 255;
        private static final int mMinBrighrness = 120;
    
        // 当前系统调节模式
        private boolean sysAutomaticMode;
        // 当前系统亮度值
        private int sysBrightness;
    
        private Context context;
    
        private ScreenBrightnessTool(Context context, int sysBrightness,
                boolean sysAutomaticMode)
        {
            this.context = context;
            this.sysBrightness = sysBrightness;
            this.sysAutomaticMode = sysAutomaticMode;
        }
    
        /**
         * 创建屏幕亮度工具
         * 
         * @param context
         * @return
         */
        public static ScreenBrightnessTool Builder(Context context)
        {
            int brightness;
            boolean automaticMode;
            try
            {
                // 获取当前系统亮度值
                brightness = Settings.System.getInt(context.getContentResolver(),
                        Settings.System.SCREEN_BRIGHTNESS);
                // 获取当前系统调节模式
                automaticMode = Settings.System.getInt(
                        context.getContentResolver(),
                        Settings.System.SCREEN_BRIGHTNESS_MODE) == SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
            }
            catch (SettingNotFoundException e)
            {
                return null;
            }
    
            return new ScreenBrightnessTool(context, brightness, automaticMode);
        }
    
        /**
         * 返回当前系统亮度调节模式
         * 
         * @return
         */
        public boolean getSystemAutomaticMode()
        {
            return sysAutomaticMode;
        }
    
        /**
         * 返回当前系统亮度值
         * 
         * @return
         */
        public int getSystemBrightness()
        {
            return sysBrightness;
        }
    
        /**
         * 设置调节模式
         * 
         * @param mode
         *            调节模式
         */
        public void setMode(int mode)
        {
            if (mode != SCREEN_BRIGHTNESS_MODE_AUTOMATIC
                    && mode != SCREEN_BRIGHTNESS_MODE_MANUAL)
                return;
    
            sysAutomaticMode = mode == SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
            Settings.System.putInt(context.getContentResolver(),
                    Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
        }
    
        /**
         * 设置屏幕亮度
         * 
         * @param brightness
         *            亮度值,值为0至100
         */
        public void setBrightness(int brightness)
        {
            int mid = mMaxBrighrness - mMinBrighrness;
            int bri = (int) (mMinBrighrness + mid * ((float) brightness)
                    / MAX_BRIGHTNESS);
    
            ContentResolver resolver = context.getContentResolver();
            Settings.System
                    .putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, bri);
        }
    
        /**
         * 亮度预览
         * 
         * @param activity
         *            预览activity
         * @param brightness
         *            亮度值(0.47~1)
         */
        public static void brightnessPreview(Activity activity, float brightness)
        {
            Window window = activity.getWindow();
            WindowManager.LayoutParams lp = window.getAttributes();
            lp.screenBrightness = brightness;
            window.setAttributes(lp);
        }
    
        /**
         * 亮度预览
         * 
         * @param activity
         *            预览activity
         * @param percent
         *            百分比(0.0~1.00)
         */
        public static void brightnessPreviewFromPercent(Activity activity,
                float percent)
        {
            float brightness = percent + (1.0f - percent)
                    * (((float) mMinBrighrness) / mMaxBrighrness);
            brightnessPreview(activity, brightness);
        }
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?