首先 要知道当前设备是否处于自动调节的状态:
public static boolean isAutoBrightness(ContentResolver aContentResolver) { boolean automicBrightness = false; try{ automicBrightness = Settings.System.getInt(aContentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; } catch(SettingNotFoundException e) { e.printStackTrace(); } return automicBrightness; }随后,需要获取当前屏幕亮度,用于绑定给自定义的seekbar:
public static int getScreenBrightness(Activity activity) { int nowBrightnessValue = 0; ContentResolver resolver = activity.getContentResolver(); try{ nowBrightnessValue = android.provider.Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS); } catch(Exception e) { e.printStackTrace(); } return nowBrightnessValue; }
public static void setBrightness(Activity activity, int brightness) { WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f); <span style="white-space:pre"> </span> activity.getWindow().setAttributes(lp); }有的时候设置了并没有生效,那是因为没有关闭自动调节功能,下面的方法能够对自动调节进行关闭:
public static void stopAutoBrightness(Activity activity) { Settings.System.putInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); } //最后一个参数设置为 <span style="font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC的时候是开启自动调节。</span>当然,设置了之后还需要对设置的值进行保存:
public static void saveBrightness(ContentResolver resolver, int brightness) { Uri uri = android.provider.Settings.System.getUriFor("screen_brightness"); android.provider.Settings.System.putInt(resolver, "screen_brightness", brightness); // resolver.registerContentObserver(uri, true, myContentObserver); resolver.notifyChange(uri, null);}
如果要用seekbar实现 那就自定义一个seekbar的监听器
class myOnSeekBarChangeListener implements OnSeekBarChangeListener{ @Override public void onStopTrackingTouch(SeekBar seekBar) { int tmpInt = seekBar.getProgress(); // 当进度小于80时,设置成80,防止太黑看不见的后果。 if (tmpInt < 80) { tmpInt = 80; } // 根据当前进度改变亮度 Settings.System.putInt(getActivity().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, tmpInt); tmpInt = Settings.System.getInt(getActivity().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, -1); WindowManager.LayoutParams wl = getActivity().getWindow().getAttributes(); float tmpFloat = (float) tmpInt / 255; if (tmpFloat > 0 && tmpFloat <= 1) { wl.screenBrightness = tmpFloat; } getActivity().getWindow().setAttributes(wl); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } }