【问题标题】:How to make android device always in wake mode?如何让安卓设备始终处于唤醒模式?
【发布时间】:2016-01-06 07:30:04
【问题描述】:

设备成功root后。现在,我需要使设备始终处于唤醒状态,即始终可见 UI,并且没有黑屏或任何白日梦屏幕。为此,我认为我必须完成以下工作:

  1. 无锁屏 - 已关闭
  2. 睡眠设置为“从不”
  3. Daydream 设置为“关闭”

我发现的都是关于应用层的,即有一些应用程序可以完成上述任务。但由于我的手机是 root 的,我想用 系统文件 来实现,这样即使其他一些应用程序尝试更改上述功能,它们也不应该这样做。

【问题讨论】:

  • 你可以写一个后台服务吗?
  • 由于我的设备已root,如果另一个应用程序尝试锁定或睡眠模式到设备上怎么办。
  • 不认为它是否已植根并不重要......是的,我不确定即使是持久服务也可以不断覆盖所有内容
  • 您是否需要手动解决方案(然后@Andrew 的答案可以工作)或一些可以作为应用程序实现此效果的代码?
  • @Gavriel 我需要一些代码来实现这一点。

标签: android root android-wake-lock


【解决方案1】:
  1. 激活开发者模式
  2. 转到开发者选项
  3. 开启“保持清醒”

【讨论】:

  • @Abdrew ..请正确理解问题。
  • 如何防止其他应用程序获得 root 访问权限,以便他们无法更改您的设置?
  • 是的,这就是原因之一,为此我已经提到我需要使用系统文件而不是任何手动解决方案。
【解决方案2】:

您的主要用例似乎如下(来自您的问题)

即使其他一些应用程序尝试更改上述功能 那么他们应该不能这样做

您可以编写一个系统服务来定期触发PowerManager.WakeLock。 (Source)

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

// screen and CPU will stay awake during this section

wl.release();

要优化服务,您还可以尝试定期将屏幕超时设置为可能的最大值,这样即使手动更改它也会重置。 (不确定最大允许多少,您需要反复试验检查)

  /**
   * set screen off timeout
   * @param screenOffTimeout int 0~6
   */
private void setTimeout(int screenOffTimeout) {
    int time;
    switch (screenOffTimeout) {
    case 0:
        time = 15000;
        break;
    case 1:
        time = 30000;
        break;
    case 2:
        time = 60000;
        break;
    case 3:
        time = 120000;
        break;
    case 4:
        time = 600000;
        break;
    case 5:
        time = 1800000;
        break;
    default:
        time = -1;
    }
    android.provider.Settings.System.putInt(getContentResolver(),
            Settings.System.SCREEN_OFF_TIMEOUT, time);
}

(Source)

【讨论】:

  • Q1-“系统服务”怎么写? Q2 - 您的回答链接说描述了这个方法,它可以与 Lollipop os 一起使用吗?
  • 对于不推荐使用的方法,最新的替代方法就可以了。
【解决方案3】:

我认为您需要修改框架...构建 framework.jar 并将其推送到设备。

你可以参考这个链接了解如何修改框架代码-Modify java code in framework.jarhttps://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-2-hacking-around/

我能想到的其他选择是使用 Airwatch/SOTI/SAP Afaria 的一些 MDM(移动设备管理)解决方案,它们具有控制设备的特权 API。

【讨论】:

  • framework.jar 是android操作系统使用的java文件。应用永远无法修改它。
  • @apmartin1991 是的,但是因为它是一个有根的手机,我们可以修改代码并将更改推送到设备..我们可以刷新我们自己的固件......
【解决方案4】:

好的,仔细阅读您的问题后,我发现您不是在寻找任何程序化解决方案。您不想安装应用程序来执行此操作,您想要的是修改系统文件以自动实现此功能。

基本上你想通过 PowerManager 类修改将其方法暴露给其他应用程序的文件,以控制睡眠时间和唤醒锁定。您需要在这里了解两件事:

  1. 您要查找的系统文件以 jar 格式提供,而不是文本或任何其他形式。
  2. 如果您以某种方式找到该文件并开始使用该文件,那么您最终会破坏已编译的 Android 框架版本,之后您的手机可能会出现异常。

结论 我知道您想通过这样做来做一些棘手的事情,但不幸的是,它不能以这种方式完成,即使您通过播放该文件来这样做,那么 PowerManager 类处理的手机的所有操作都将开始与您一起玩。 :)

【讨论】:

  • 你完全理解它,是的,我想做一些棘手的事情,但之后显然没有任何奇怪的行为。
【解决方案5】:

要阻止特定视图的睡眠模式,只需在该视图上调用setKeepScreenOn(true) 或将keepScreenOn 属性设置为true。

反过来,当视图在屏幕上时,它会阻止屏幕关闭。它无需 WAKE_LOCK 权限(或任何特殊权限)即可工作,这是一种更好的做法。

此外,这不会强制手机在应用程序生命周期之外保持唤醒状态。你可以用 WakeLock 来解决这个问题

您可以将上述方法与另一种方法集成以获得完整的解决方案(在应用层之外):

从 root shell(例如 adb shell),您可以锁定:

echo mylockname >/sys/power/wake_lock 

After which the device will stay awake, until you do:

echo mylockname >/sys/power/wake_unlock    

'mylockname' 使用相同的字符串。

请注意,这不会阻止屏幕变黑,但它 将阻止 CPU 休眠。

请注意,/sys/power/wake_lock 对于用户无线电 (1001) 是可读写的 和组系统 (1000),当然还有 root。

来源:https://lwn.net/Articles/479841/

来源:https://stackoverflow.com/a/18968753/3125120

【讨论】:

    【解决方案6】:

    如果您想通过 adb shell 命令增加屏幕超时,请按照以下步骤操作:

    步骤

    1. 开启 USB 调试
    2. 通过 USB 数据线连接安卓设备
    3. 将目录更改为 android-sdk/platform-tools/
    4. 在终端检查设备使用以下命令连接:$ adb devices
    5. 发出屏幕超时命令:$ adb shell settings put system screen_off_timeout 60000

    注意

    60000 = 1 分钟

    【讨论】:

      【解决方案7】:

      因此,从开发人员选项中,您可以获得的最佳效果是 30 分钟左右的“唤醒”...

      根据this,有一些很好的应用程序可以覆盖功能并无限期地保持屏幕开启:

      1. Keep Screen On
      2. Stay Alive
      3. Wakey

      更新

      您需要研究 Android 的文件系统的结构及其工作原理,然后去修改其核心文件。没有简单的方法可以满足您的要求。唯一的方法是创建一个永远不会有 onDestroy() 并且会在后台持续运行的 Android 应用程序。您可以使用 WakeLock 来实现。

      在这里寻找how to use the WakeLock

      【讨论】:

      • 感谢您的回答,但我的设备已植根,我需要更改系统文件,以便设备始终处于唤醒模式。否则,如果有另一个应用程序可能会尝试锁定或将设备置于睡眠模式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多