首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让设备进入睡眠状态(Android)

如何让设备进入睡眠状态(Android)
EN

Stack Overflow用户
提问于 2015-05-02 22:44:46
回答 2查看 700关注 0票数 1

我想写一个简单的程序,在主要活动中只有一个按钮,设备将睡眠时,点击这个按钮(就像手机睡眠时,我们点击电源按钮在android供电的智能手机)。请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2015-05-02 23:16:40

在Lollipop之前,没有公共API允许您这样做。在棒棒糖中,你需要是一名设备管理员,并按照CommonsWare的建议使用DevicePolicyManager#lockNow()。然而,有一个技巧你可以使用(mwahaha)来实现你想要的东西。首先,您需要WRITE_SETTINGS权限

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

这将允许您更改某些系统设置。我们想要的是Settings.System.SCREEN_OFF_TIMEOUT。然后,您可以将screen-timeout设置为0毫秒,这将在一两秒后导致屏幕关闭。在屏幕关闭后,您需要重置超时,这样屏幕就不会在您不想让它超时时不断超时。

代码语言:javascript
运行
复制
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不希望你的应用程序有能力做到这一点,你可能应该学会接受它。

票数 1
EN

Stack Overflow用户

发布于 2015-07-14 16:38:40

为了实现探路者精英提到的方法,必须将应用程序作为系统应用程序进行签名。另一种解决方法是,您可以启用

LOCAL_PRIVILEGED_MODULE := true

在您的Android.mk文件中。这将给你的应用程序一个特权模式。(当然,您只能在拥有firmware build工作区的情况下执行此操作。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30003606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档