繁体   English   中英

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

[英]Programming powering off and powering on in one single OnClick function on android

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

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

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

我还发现之后很难唤醒设备。 如果使用物理按钮关闭屏幕电源,此代码有效,但使用上述方法关闭电话电源时,似乎无法正常工作。

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

预先感谢您的帮助!

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

这不会关闭屏幕电源。 将背光设置为0亮度。 我上次检查过,您无法以编程方式关闭屏幕电源。

但这只有在onClick函数返回时才生效。

正确。 这就是Android运作的方式。 UI是单线程的。 您更改屏幕亮度的请求已放入队列中,直到您通过从onClick()返回将控制权返回给Android之前,该消息才会得到处理。

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

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

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

该设备最初没有处于睡眠状态。

如果使用物理按钮关闭屏幕电源,此代码有效,但使用上述方法关闭电话电源时,似乎无法正常工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM