3

我创建了一个带有空 Activity 的目标 API 15 (ICS) 的新项目。我添加了清单权限:

<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);
    }

但是设备没有任何反应。根据PowerManager 文档,我预计屏幕会(立即)熄灭。那么,我做错了什么还是这不起作用?


编辑:

我尝试了 Ashish Ranjan 的建议,screenBrightness在获取 WakeLock 后手动设置,但这也不起作用。

4

2 回答 2

1

根据 Android文档,使用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);
于 2016-07-15T13:41:27.303 回答
0

我想你忘了添加这个:

 wl.release();
于 2016-07-15T13:23:21.127 回答