我想编写一个简单的程序,该程序在主要活动中只有一个按钮,单击该按钮后设备将进入睡眠状态(例如,当我们单击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不希望您的应用程序具有执行此操作的能力,您可能应该学习接受它。

10-07 19:30
查看更多