我创建了一个目标API 15(ICS)的新项目,其中包含空的Activity。我添加了显示权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
我将代码添加到onCreate()
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PowerManager pm = (PowerManager) getSystemService(getApplicationContext().POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Tag");
wl.acquire();
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
}
但设备没有任何反应。根据{{3}}我预计屏幕会立即关闭。那么,我做错了什么还是不行?
修改
我尝试了Ashish Ranjan建议在获取WakeLock后手动设置screenBrightness
,但这也不起作用。
答案 0 :(得分:1)
根据Android documentation,使用PARTIAL_WAKE_LOCK
不会关闭屏幕。但是当WakeLock
中的此模式处于活动状态时,它将允许屏幕关闭。
因此,设备屏幕不会立即关闭,您必须等待屏幕超时(这取决于设备显示设置中设置的时间),但是CPU
将继续运行。
PARTIAL_WAKE_LOCK
唤醒锁定级别:确保CPU正在运行;屏幕和键盘背光将被允许熄灭。
如果用户按下电源按钮,屏幕将关闭,但CPU将保持打开状态,直到所有部分唤醒锁定都被释放。
要关闭屏幕,您必须像这样更改Window LayoutParams:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
答案 1 :(得分:0)
我想你忘了加上这个:
wl.release();