如何使Android设备始终处于唤醒模式?

成功设备root后。 现在,我需要让设备始终处于唤醒状态,即始终可见UI,无黑屏或任何白日梦屏幕。 为此,我想我要做到以下几点:

  1. 没有锁定屏幕 – 关闭
  2. 睡眠设置为“从不”
  3. 白日梦开始“关闭”

我发现所有关于应用程序层,即有一些应用程序可以执行上述任务。 但是,由于我的移动设备是根植的,我想用系统文件实现,这样即使其他一些应用程序试图改变上述function,那么它们也应该无法实现。

  • 安装Android APK没有提示
  • 如何在Android上工作? 它有什么先决条件? 什么是Android的根?
  • 如何通过Android SDK获得root权限?
  • 通过ADB以root身份启动脚本
  • 如何以root身份运行adb push?
  • adb pull - >找不到设备
  • 如何在Android中请求root访问权限?
  • Runtime.exec():在Android重新启动?
    1. 激活开发者模式
    2. 转到开发人员选项
    3. 打开“保持清醒”

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

    即使其他一些应用程序试图改变上述function,他们也不应该这样做

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

    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); } 

    ( 来源 )

    我想你需要修改框架……构建framework.jar并将其推送到设备。

    您可以参考此链接以了解如何修改框架代码 – 修改 framework.jar中的java代码和https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-2-hacking -周围/

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

    要防止特定View上的睡眠模式,只需在该View上调用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’的相同字符串。

    请注意,这不会阻止屏幕变黑,但会阻止CPUhibernate。

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

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

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

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

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

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

    结论我理解你想通过这样做做一些棘手的事情,但遗憾的是它无法以这种方式完成,即使你通过播放该文件这样做,所以PowerManager类处理的手机的所有操作都将开始与你一起玩。 🙂

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

    脚步

    1. 打开USB调试
    2. 通过USB电缆连接Android设备
    3. 将目录更改为android-sdk / platform-tools /
    4. 在终端检查设备中使用以下命令连接: $ adb devices
    5. 问题屏幕超时命令: $ adb shell settings put system screen_off_timeout 60000

    注意

    60000 = 1分钟

    所以从开发者选项中你可以得到的最好的是30分钟左右的“唤醒”……

    根据这一点 ,有一些很好的应用程序可以覆盖function并使您的屏幕无限期地保持开启状态:

    1. 保持屏幕开启
    2. 活着
    3. WAKEY

    UPDATE

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

    在这里查看如何使用WakeLock