Android WindowManager.LayoutParams和屏幕亮度

Android WindowManager.LayoutParams和屏幕亮度,android,Android,我对WindowManager.LayoutParams有一些问题。我需要使用接近传感器关闭和打开屏幕电源。接近传感器正常,但layoutParams不工作 public void setBright(float value) { Window mywindow = getWindow(); WindowManager.LayoutParams lp = mywindow.getAttributes(); lp.screenBrightness = value;

我对WindowManager.LayoutParams有一些问题。我需要使用接近传感器关闭和打开屏幕电源。接近传感器正常,但layoutParams不工作

    public void setBright(float value) {
    Window mywindow = getWindow();
    WindowManager.LayoutParams lp = mywindow.getAttributes();
    lp.screenBrightness = value;
    lp.buttonBrightness = value;

    if (value != WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF) {
        lp.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
    }

    mywindow.setAttributes(lp);
}
屏幕正确关闭电源。但是如果我使用setBright(WindowManager.LayoutParams.BRIGHTNESS\u OVERRIDE\u NONE),屏幕将保持黑色。我也试过使用wakeLock

private void powerOnScreen() {
    setBright(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE);

    onResume();
    if (!wakeLock.isHeld())
        wakeLock.acquire();
}
其中wakeLock是:

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(
            PowerManager.SCREEN_DIM_WAKE_LOCK
            | PowerManager.ON_AFTER_RELEASE,
            "MY_TAG");

但它仍然不起作用。有什么想法吗?目标平台是Android 2.2

似乎您应该在newWakeLock调用中添加标志PowerManager.ACQUIRE\u CAUSES\u WAKEUP

编辑: 这段话对我很有用:

        boolean isScreenOff = !powerManager.isScreenOn();
        if (isScreenOff) {
            Window window = getWindow();

            if (window != null) {
                window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            }

            stopTimeDialogListener.wakeLock = powerManager
                    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
                            | PowerManager.ACQUIRE_CAUSES_WAKEUP
                            | PowerManager.ON_AFTER_RELEASE, "TIMING_ALARM");
            stopTimeDialogListener.wakeLock.acquire();

            try {
                long screenOffDelay = Settings.System.getLong(
                        getContentResolver(),
                        Settings.System.SCREEN_OFF_TIMEOUT);

                new Timer().schedule(
                        stopTimeDialogListener.releaseWakeLock,
                        screenOffDelay);

            } catch (SettingNotFoundException e) {
            }
        }

为了唤醒手机,我使用了一个类似的代码片段,它可以正常工作。但是如果我使用lp.screenBrightness=0.0f,则wakelock不起作用。所以这不是wakelock的问题,而是LayoutParams的一个bug?当我第一次打开/关闭电源时,我注意到屏幕会在我释放wakelock时立即关闭,这就是我添加计时器的原因。编辑之前的评论时,我匆忙按Enter键。现在我觉得我没有正确理解你的意图。你想关掉屏幕吗?或者你想把它打开,但不是用全亮度?注意:当我第一次玩wakelock时,我注意到当我释放锁的时候屏幕是关闭的,这就是为什么我添加了计时器。我想关闭屏幕并使用接近传感器打开屏幕。因此,当手机靠近我的脸时,使用setBright(0.0f)关闭屏幕电源,使用wakelock打开屏幕电源。但是右边(0.0f)不允许屏幕通电,在邻近位置发现另一个。你读了吗?