我们知道,安卓手机屏幕的亮度和锁屏时间是由系统设置控制的,但在开发某些应用时,我们不希望它运行过程中锁屏或者希望保持指定的亮度,虽然这些在系统设置选项里可以实现,但难免会忘记设置以至于达不到希望的运行效果。如果在开发程序时,把这些工作在代码里实现是个不错的选择。
那么如何实现代码控制屏幕锁屏和亮度呢?
1、如果希望保持屏幕常亮,可以在代码中onCreate()下添加如下语句:
<pre name="code" class="java" style="font-size: 14px;"> <span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);</span>
<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">// MyTag可以随便写,可以写应用名称等</span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);</span>
<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">// 换成PowerManager.SCREEN_DIM_WAKE_LOCK会变暗)</span>
<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "MyTest1");</span>
<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">wl.acquire();// 开启屏幕常亮</span>
<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">wl.cancel();//关闭屏幕常亮(可根据实际情况添加到指定位置)</span>
2、如果希望保持屏幕常亮,则需要定义几个函数:
private void screenBrightness_check()// 亮度模式检测,如果为自动,则关闭该模式
{
// 先关闭系统的亮度自动调节
try {
if (android.provider.Settings.System.getInt(getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE) == android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
android.provider.Settings.System
.putInt(getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE,
android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
} catch (SettingNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void autoBrightness()// 设置亮度自动调节
{
android.provider.Settings.System
.putInt(getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE,
android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
private void setScreenBritness(int brightness)// 亮度调节
{
// 不让屏幕全暗
if (brightness <= 1) {
brightness = 1;
}
// 设置当前activity的屏幕亮度
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
// 0到1,调整亮度暗到全亮
lp.screenBrightness = Float.valueOf(brightness / 255f);
this.getWindow().setAttributes(lp);
// 保存为系统亮度
android.provider.Settings.System.putInt(getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness);
}
/*在调用时,运行如下函数*/
screenBrightness_check();// 关闭亮度自动调节
setScreenBritness(n);// 设置指定亮度,n的取值范围是0—255,其中0为最暗,255最亮
3、最后注意在AndroidManifest.xml中添加相应的权限:
<span style="font-size:12px;"><uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /></span>
<span style="font-size:14px;"> </span>
这样,我们就可以在需要时调节屏幕亮度和常亮了。