0

我想编写一个活动,在单击按钮后关闭屏幕,然后在 2 秒后将其重新打开。我尝试使用以下代码来关闭屏幕:

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 0/(float)255;
getWindow().setAttributes(lp);

但它只会在 onClick 函数返回时生效。我尝试将其运行到处理程序中,但没有成功。我需要找到一种方法来强制在函数返回之前应用设置,以便我可以在 2 秒后在同一个 onClick 调用中调用 power on 函数。

我还发现之后很难唤醒设备。虽然如果我使用物理按钮关闭屏幕,则此代码有效,但使用前面描述的技术关闭手机电源时,它似乎不起作用。

PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP | 
PowerManager.ON_AFTER_RELEASE ,"Dev Tag");
try
{
    wl.acquire();
    wl.release();
}
catch (Exception e)
{
    Toast.makeText(this, e.getMessage(),20).show();
}

提前感谢您的帮助!

4

1 回答 1

0

我尝试使用以下代码来关闭屏幕

这不会关闭屏幕。这会将背光设置为 0 亮度。你不能以编程方式关闭屏幕,最后我检查过。

但它只会在 onClick 函数返回时生效。

正确的。这就是安卓的工作方式。UI 是单线程的。您更改屏幕亮度的请求已放入队列中,直到您通过从onClick().

我需要找到一种方法来强制在函数返回之前应用设置,以便我可以在 2 秒后在同一个 onClick 调用中调用 power on 函数。

这是不可能的。这也是没有必要的。两秒钟后有很多方法可以控制。可能最有效的是调用postDelayed()您的一个小部件。

我还发现之后很难唤醒设备

该设备一开始并没有睡着。

虽然如果我使用物理按钮关闭屏幕,则此代码有效,但使用前面描述的技术关闭手机电源时,它似乎不起作用。

AWakeLock是您在后台服务中使用的东西,用于在您完成某些工作时让设备保持清醒片刻。它也是内部用于处理类似想法的东西android:keepScreenOn(用于电子书阅读器、视频播放器和其他用户可能暂时不会点击屏幕的活动)。它与 . 无关screenBrightness

于 2011-11-23T01:45:32.720 回答