在Android上的一个OnClick函数中编程关闭电源并打开电源

时间:2011-11-23 01:15:18

标签: android android-wake-lock android-screen

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

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

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

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

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

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

这不会关闭屏幕电源。这将背光设置为0亮度。我不能以编程方式关闭屏幕,最后我查了一下。

  

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

正确。这就是Android的工作方式。 UI是单线程的。您更改屏幕亮度的请求会被放入队列中,只有从onClick()返回后才能将控制权返回给Android,才会处理该消息。

  

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

这是不可能的。这也没有必要。经过两秒钟后,有很多方法可以获得控制权。可能效率最高的是在你的一个小部件上调用postDelayed()

  

我还发现之后唤醒设备非常困难

设备首先没有睡着。

  

虽然如果我使用物理按钮关闭屏幕电源,但是当使用上述技术关闭电话时,此代码似乎无效。

您在后台服务中使用WakeLock,以便在您完成某项工作时让设备保持清醒一会儿。它也是内部用于处理的内容,如android:keepScreenOn(用于电子书阅读器,视频播放器以及用户可能暂时不点击屏幕的其他活动)。它与screenBrightness无关。