【问题标题】:Attempting to put Android device to sleep, but the PowerManager does not contain a "goToSleep(long) method试图让 Android 设备进入睡眠状态,但 PowerManager 不包含“goToSleep(long) 方法”
【发布时间】:2015-02-11 16:23:15
【问题描述】:

我试图让设备进入睡眠状态,我发现references 到处都是关于使用 PowerManager 类的 goToSleep(long) 方法,但我在文档中没有看到它,当我尝试使用它时它不起作用它在我的代码中。

Android's documentation 不包含我可以看到的 goToSleep 方法。

我的代码:

 private void sleepDevice() {
    try {
        PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
        long time = 1000;
        powerMgr.goToSleep(time);
    } catch (Exception ex) {
        updateStatus("Error attempting to reboot device.");
        updateStatus(ex.getLocalizedMessage());
    }
}

Android Studio 不允许代码编译并显示消息“无法解析方法 'goToSleep(long)。

我什至不认为这种方法已被弃用。另外,我不需要担心安全权限,该调用旨在在有根设备上运行或在非根设备上优雅地失败。

【问题讨论】:

  • 我的问题是,我可以使用另一种方法/技术让 Android 设备进入睡眠状态吗?这个方法是另一个类吗? goToSleep 方法去哪儿了?
  • goToSleep() 已从 API 级别 21 (Lollipop) 中的 PowerManager 中删除,为什么我不知道。 developer.android.com/sdk/api_diff/preview-21/changes/…
  • old Android docs (thanks to Web Archive) 还声明您需要 DEVICE_POWER 权限,该权限不适用于无根设备上的 3rd 方应用程序。
  • 感谢@PhilippReichart,这非常令人困惑。在留言板中看到参考资料,但在文档或 API 中没有。

标签: java android powermanager sleep-mode


【解决方案1】:

您可以使用 DeviceAdministrator ,但您需要用户授予您这些权限。

【讨论】:

  • 设备管理 API 只允许您锁定设备,AFAIK。我不知道这是否符合 OP 的需求“让它进入睡眠状态”。
  • @CommonsWare - 是的,你是对的 :D,这完全取决于 OP 的需求
  • @DanieIM。谢谢您的帮助。我实际上只需要关闭屏幕电源,但我不想锁定设备。决定我们现在可以忽略这个要求。我最接近让它工作的方法是将睡眠定时器设置为零并让设备关闭屏幕。然后,当用户重新启动设备时,我重新发送计时器。
【解决方案2】:
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = manager
    .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR_OWN_TAG");
wl.acquire();
wl.release();

试试这个方法并给出一些反馈。

【讨论】:

  • 这个答案与问题无关
  • 这是错误的方法,问题是关于睡觉。
猜你喜欢
  • 1970-01-01
  • 2017-06-23
  • 2012-03-29
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多