android调节屏幕亮度(包括只修改应用程序和修改系统)
本帖最后由 jairkong 于 2012-12-29 01:26 编辑 一:只改变当前程序android屏幕亮度 (1)方法: lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0(系统设定)、0.0(暗)~1.0(亮) ※调用处理的地方,例如, Activity.onCreate()等等 代码: WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = 1.0f; getWindow().setAttributes(lp); (2)恢复
当离开当前Acitivity时,屏幕亮度会恢复到原先的亮度。另外将lp.screenBrightness 设为 -1(
WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE),也会让屏幕恢复到原先的亮度(即系统设置)。
(3)最小亮度
WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE,官方文档说这个值可以将屏幕亮度设置到最低亮度(Lowest Brightness)。实际意识是将屏幕设置到全黑,屏幕也无法响应触控了。
在G3(CM6)上,将屏幕设置到最低亮度值是
0.004(精度0.001),这时屏幕基本全黑,但仍能控制。低于0.004(精度0.001)时,屏幕便失去控制。0.01也是个要记录的值,屏幕亮度足够低,当仍能看到东西。这些值应该是和设备有关的,不能乱设。
(4)封装进度条控制![]() 1、封装类:
package com.cindigo.MyView;
import android.content.Context;
import android.content.SharedPreferences; import android.graphics.Color; import android.preference.DialogPreference; import android.preference.PreferenceManager; import android.util.AttributeSet; import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener { private static final String androidns="http://schemas.android.com/apk/res/android";
public SeekBar mSeekBar;
private TextView mSplashText,mValueText; private Context mContext;
private String mDialogMessage, mSuffix;
private int mDefault, mMax, mValue = 0,oldValue=0,preValue=0; public SeekBarPreference(Context context, AttributeSet attrs) { super(context,attrs); mContext = context; mDialogMessage = attrs.getAttributeValue(androidns,"dialogMessage"); mSuffix = attrs.getAttributeValue(androidns,"text"); mDefault = attrs.getAttributeIntValue(androidns,"defaultValue", 0); mMax = attrs.getAttributeIntValue(androidns,"max", 100); Log.e("SeekBarPreference", "SeekBarPreference1---"+"defaultValue:"+mDefault+"mDefault:"+mMax); } public SeekBarPreference(Context context, AttributeSet attrs,int defStyle) { super(context, attrs, defStyle); Log.e("SeekBarPreference", "SeekBarPreference2"); } @Override protected View onCreateDialogView() { LinearLayout.LayoutParams params; LinearLayout layout = new LinearLayout(mContext); layout.setOrientation(LinearLayout.VERTICAL); layout.setPadding(6,6,6,6);
mSplashText = new TextView(mContext);
mSplashText.setTextColor(Color.WHITE); mSplashText.setTextSize(20); if (mDialogMessage != null) mSplashText.setText(mDialogMessage); layout.addView(mSplashText);
mValueText = new TextView(mContext);
mValueText.setGravity(Gravity.CENTER_HORIZONTAL); mValueText.setTextSize(25); mValueText.setTextColor(Color.WHITE); params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); mValue = shouldPersist() ? getPersistedInt(mDefault) : 0; if (mValueText != null){ String volum=String.valueOf(100*mValue/getMax())+"%"; mValueText.setText(mSuffix == null ? volum : mSuffix.concat(volum)); } layout.addView(mValueText, params); mSeekBar = new SeekBar(mContext); //设置progressbar属性 setMax(mMax); setProgress(mValue); mSeekBar.setOnSeekBarChangeListen layout.addView(mSeekBar, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); Log.e("SeekBarPreference", "onCreateDialogView---getProgress():"+getProgress()+"---Max:"+mMax); getOldValue();//得到并保存初始值 Log.e("SeekBarPreference", "onCreateDialogView---oldValue:"+oldValue); return layout; } @Override protected void onBindDialogView(View v) { super.onBindDialogView(v); //设置progressbar属性 setMax(mMax); setProgress(mValue); Log.e("SeekBarPreference", "onBindDialogView---mValue:"+mValue); } @Override protected void onSetInitialValue(boolean restore, Object defaultValue) { super.onSetInitialValue(restore, defaultValue); if (restore) { mValue = shouldPersist() ? getPersistedInt(mDefault) : 0; Log.e("SeekBarPreference", "onSetInitialValue--true--mValue:"+mValue+"mDefault:"+mDefault); }else{ mValue = (Integer)defaultValue; Log.e("SeekBarPreference", "onSetInitialValue--false--mValue:"+mValue); } } public void onProgressChanged(SeekBar seek, int value, boolean fromTouch) { String volum=String.valueOf(100*value/getMax())+"%"; mValueText.setText(mSuffix == null ? volum : mSuffix.concat(volum)); if (shouldPersist()){ persistInt(value); Log.d("SeekBarPreference", "onProgressChanged---onProgressChanged:"+persistInt(value)); } callChangeListener(new Integer(value)); this.mValue=value; Log.d("SeekBarPreference", "onProgressChanged---onProgressChanged:"+value); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub Log.e("SeekBarPreference", "onStartTrackingTouch---oldValue:"+oldValue); } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub updatePreference(mValue); notifyChanged(); Log.e("SeekBarPreference", "onStopTrackingTouch+preValue:"+getPreferenceValue()+"mvalue:"+mValue); } @Override protected void onDialogClosed(boolean positiveResult) { // TODO Auto-generated method stub if (positiveResult) { updatePreference(mValue); notifyChanged(); Log.e("SeekBarPreference", "onDialogClosed--positive button---mValue:"+mValue); } else { updatePreference(oldValue); notifyChanged(); Log.e("SeekBarPreference", "onDialogClosed--negative button---oldValue:"+oldValue); } } public void setMax(int max) { mMax = max; if (mSeekBar != null) mSeekBar.setMax(mMax); } public int getMax() { return mMax; } public void setProgress(int progress) { mValue = progress; if (mSeekBar != null) mSeekBar.setProgress(progress); } public int getProgress() { return mValue; } private void updatePreference(int newValue) { SharedPreferences.Editor editor = getEditor(); editor.putInt(getKey(), newValue); editor.commit(); //更新 SharedPreferences 配置文件中的值 } public int getPreferenceValue() { if (shouldPersist()){ this.preValue= getPersistedInt(mDefault); } Log.e("SeekBarPreference", "getPreferenceValue---preValue:"+preValue); return this.preValue; } public void getOldValue() { this.oldValue= shouldPersist() ? getPersistedInt(mDefault) : 0; Log.e("SeekBarPreference", "getOldValue---oldValue:"+oldValue); } }
2、使用:
A、在preference中直接配置:
android:dialogTitle="@string/preference_volume_dialogtitle" android:key="preference_volume" android:title="@string/preference_volume_title" android:summary="@string/preference_volume_summary" android:defaultValue="50" android:max="100" android:text="音量:" android:dialogMessage="请在此调节游戏音量大小:" android:layout="@layout/preference_layout_seekbar" android:widgetLayout="@layout/preference_arrow"/>
B、代码中监听事件:
public class SettingActivity extends PreferenceActivity implements OnSharedPreferenceChange
} 二、全局亮度(修改手机系统亮度) (1)说明:
可以改变全局亮度,但要让它生效可能需要,将模式改为手动
要调用这些API,需要权限:
(2)代码说明:
Android的屏幕亮度好像在2.1+的时候提供了自动调节的功能,所以,如果当开启自动调节功能的时候, 我们进行调节好像是没有一点作用的,这点让我很是无语,结果只有进行判断,看是否开启了屏幕亮度的自动调节功能。
然后就是要觉得当前的亮度了,这个就比较纠结了:
那如何修改屏幕的亮度呢?
那么,能设置了,但是为什么还是会出现,设置了,没反映呢?
嘿嘿,那是因为,开启了自动调节功能了,那如何关闭呢?这才是最重要的:
能开启,那自然应该能关闭了哟哟,那怎么关闭呢?很简单的:
至此,应该说操作亮度的差不多都有了,结束!
哎,本来认为是应该结束了,但是悲剧得是,既然像刚才那样设置的话,只能在当前的activity中有作用,一段退出的时候,会发现毫无作用,悲剧,原来是忘记了保存了。
这回该差不多了。
(3)封装: 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 { }
三:更多参考:
|