【问题标题】:How to access Power Saving Mode Programmatically in Android?如何在 Android 中以编程方式访问省电模式?
【发布时间】:2014-04-21 10:24:34
【问题描述】:

我需要在 android 中以编程方式打开和关闭省电模式。 有没有这方面的API?如我所见,省电模式选项不可用 对于所有移动设备,是否有任何代码来检查这些设置的可用性,如果可用,然后将其打开和关闭?

还有什么解决办法吗?

【问题讨论】:

标签: android save


【解决方案1】:

如果你想测试省电模式(PSM):

以下内容适用于 Android Studio 3.4.1 和 Google Pixel 2 XL 手机:

$ adb shell dumpsys battery unplug # a charging device cannot enter PSM
$ adb shell settings put global low_power 1 # enter Power Saving Mode (PSM)

这仅适用于具有标准省电模式的设备,例如三星,但不适用于华为。在某些三星设备上,此设置存储在键入psm_switch 的全局设置中,如上所述。

您可以通过将 low_power 设置为 0 或通过以下方式再次启用充电来退出 PSM:

$ adb shell dumpsys battery reset

来源:https://developer.android.com/training/monitoring-device-state/doze-standby#testing_doze_and_app_standby

【讨论】:

    【解决方案2】:

    通过您的应用控制用户的设备设置是一种不好的做法。

    不如考虑在电池电量不足时暂停后台服务。

    或通知用户电池电量不足并建议用户切换不必要的设置,如蓝牙或 WiFi。

    【讨论】:

    • 老兄,也许有人可能需要,因为找到选项存在问题
    • 首先,这个答案是在 2015 年写的,当时很多东西仍然受到限制或尚不可用,所以就是这样,但其次,理论上,你可以使用 PowerManager (developer.android.com/reference/android/os/PowerManager)。问题始终是,弄乱用户的设备设置被认为是对隐私的侵犯......
    • 可能是提问者的手机,/用户=程序员的情况,如果您是用户/程序员并且是您的手机,则不视为侵犯隐私。所以只说“不好的做法”而不是说如何,就是在回避这个问题。
    • 这很公平。我本可以对他的问题发表评论,而不是这样的答案。但是,如果提问者希望在他们的应用程序中使用它(他们在问题中并不清楚),那么我的回答就是合法的。
    【解决方案3】:

    大多数设备没有内置的省电 API,因此您可以尝试通过关闭蓝牙(如果已打开)、wi-fi 等,在设置中停用位置来创建自己的省电模式,或检查是否启用了其他耗电选项。

    【讨论】:

    • 但是当我在具有内置省电模式的设备上运行我自己的省电应用程序时,设置的行为会是什么?此外,内置的省电模式还做了一些额外的省电工作,比如降低显示刷新率、关闭一半的 CPU 内核......这不会通过编码来完成吗?
    • 你说的很有可能是三星。好吧,在那种情况下我推荐这个developer.samsung.com/develop
    • 是的,我也检查了 SDK,但没有找到任何参考。
    【解决方案4】:

    在 android SDK 中没有可用的 API 来执行此操作。但是,您可以通过关闭编码中的蓝牙、Wi-Fi 和其他未使用的服务来控制/节省电量。

    【讨论】:

    • 你能看看我对@WishMaster 的回复吗?
    • 根据我的经验,三星和 HTC 都是以最不可预测的方式修改 Android 操作系统的制造商之一。 “省电模式”不是官方 AOSP 功能,也无法通过官方 SDK 检测到。不过,有一些可能的方法可以解决它。
    • 好的。谢谢大家。我想我需要选择第二个。
    【解决方案5】:

    您不能以编程方式设置省电模式。允许这样做是个坏主意。

    在某些三星设备上,您可以检查它是否已启用:

    final String result = Settings.System.getString(getContentResolver(), "psm_switch");
    Log.v("Debug", "Powersaving active: " + TextUtils.equals(result, "1"));
    

    更多信息请参见:https://stackoverflow.com/a/39296959/3600178

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-07
      • 2014-09-23
      • 1970-01-01
      • 2015-04-29
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多