我想编写一个简单的程序,该程序在主要活动中只有一个按钮,单击该按钮后设备将进入睡眠状态(例如,当我们单击Android供电的智能手机上的电源按钮时,手机将进入睡眠状态)。
请帮我。
最佳答案
在棒棒糖之前,没有公共API允许您执行此操作。在Lollipop中,您需要成为设备管理员,并按照CommonsWare的建议使用DevicePolicyManager#lockNow()
。但是,您可以使用一个技巧(mwahaha)来完成所需的工作。首先,您需要WRITE_SETTINGS权限
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
这将允许您更改某些系统设置。我们要的是
Settings.System.SCREEN_OFF_TIMEOUT
。然后,您可以将屏幕超时设置为0毫秒,这将在一两秒后导致屏幕关闭。屏幕关闭后,您将需要重置超时,以使屏幕在您不希望超时时不会持续超时。final int previous = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT); // retain previous timeout value
Settings.System.putInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 0); // set timeout to 0
// wait 3 seconds then reset the timeout setting
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Settings.System.putInt(
getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, previous);
}
}).start();
警告:这绝对是令人讨厌的骇客。因此,这是不可靠的。可能有很多事情可能导致此方法不起作用。例如,一个应用可以明确地是keeping the device awake。可能存在其他系统或开发人员设置,这些设置也阻止设备超时(例如,插入设备时)。最重要的是,Android不希望您的应用程序具有执行此操作的能力,您可能应该学习接受它。