在恢复Android屏幕亮度时出现空白屏幕

3

请注意,我只是想关闭显示器。如果您有更好的方法,请建议一下 :)

我正在使用

params.screenBrightness = 0;
getWindow().setAttributes(params);

并且

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1;
getWindow().setAttributes(params);

打开/关闭显示器。当我重新打开屏幕时,只能看到一个带背光的空白屏幕。

不知道为什么会这样?

谢谢, Mike


尝试重新绘制先前显示的视图,因为最后一条指令实际上是打开背光。尝试使其无效(如果可能)。 - Nikola Despotoski
你上一条指令是打开显示器。我们假设这只是打开背光,屏幕上只有白色像素。我要告诉你的是,你需要重新绘制/使无效你想要显示的视图,换句话说,白色像素将被替换。 - Nikola Despotoski
是的,但是如何重新绘制呢?我需要重新绘制包括顶部状态栏在内的所有内容。 - thegreyspot
请阅读此处,我认为这可能会有所帮助:http://developer.android.com/reference/android/os/PowerManager.html - Nikola Despotoski
我在那里没有看到关于重绘的任何内容:/ - thegreyspot
显示剩余3条评论
4个回答

2

虽然这只是一个小更改,但尝试在末尾添加一个“F”,例如:

params.screenBrightness = 0F;
getWindow().setAttributes(params);

如果那个方法无法解决问题,或许刷新屏幕可以将屏幕恢复到默认设置。我做了一些研究并找到了以下代码,或许可以用来刷新屏幕:

this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

另外,您可以尝试使用PowerManager Wakelock打开手机:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
// Wakes the screen on.
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, AudioControlExtender.this.getClass().getName());
wl.acquire();

如果那样不起作用,那么就像你现在这样打开屏幕,然后执行以下操作:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
// Sets the screen on maximum brightness.
// This might fix the problem you are having with the screen brightness since
// the screen settings are changed.
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, AudioControlExtender.this.getClass().getName());
wl.acquire();

1

让这个工作的最好方法是使用PowerManager.goToSleep(time)。

这样,您可以控制(如果需要)设备休眠的时间长度,您还可以使用PowerManager.isScreenOn()来确定它是否已经重新开启。

如果您还没有设置WakeLock,那么您将不得不进行设置...这很容易,只需执行即可。

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");  

然后你可以使用powerManager.goToSleep。

编辑

确保在onPause和onResume方法中释放WakeLock并获取它们!


1

0

屏幕亮度范围从0到1,而你正在使用的-1是用于“首选”亮度。首先尝试使用1,看看是否有效,因为-1可能只是保持之前设置的亮度。


嗯,也许我今天晚些时候会自己尝试一下,知道如何做这件事可能会很有用 (^_~) - Izkata
嗯,知道你是否有相同的结果会很有趣 :/ - thegreyspot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接