Doze模式adb shell命令集
来源:互联网 发布:网络诈骗常见形式 编辑:程序博客网 时间:2024/06/10 11:05
一、adb 指令
1.1 让设备进入未连接充电的模式
进行doze模式命令模拟的话,需要先下发该命令,因为只要存在充电状态,是无法从Acitve状态切换到InActive状态的
adb shell dumpsys battery unplug
Z90:/ # dumpsys battery unplugdumpsys battery unplug
1.2 退出Doze模式,让手机恢复正常需要复位充电模式
不使用doze命令模拟的时候,记得退出这个模式,不然电池电量状态可能不更新哦
adb shell dumpsys battery reset
Z90:/ # dumpsys battery resetdumpsys battery reset
1.3 Doze Help 命令查询
adb shell dumpsys deviceidle -h
Z90:/ # dumpsys deviceidle -hdumpsys deviceidle -hDevice idle controller (deviceidle) commands: help Print this help text. step [light|deep] Immediately step to next state, without waiting for alarm. force-idle [light|deep] Force directly into idle mode, regardless of other device state. force-inactive Force to be inactive, ready to freely step idle states. unforce Resume normal functioning after force-idle or force-inactive. get [light|deep|force|screen|charging|network] Retrieve the current given state. disable [light|deep|all] Completely disable device idle mode. enable [light|deep|all] Re-enable device idle mode after it had previously been disabled. enabled [light|deep|all] Print 1 if device idle mode is currently enabled, else 0. whitelist Print currently whitelisted apps. whitelist [package ...] Add (prefix with +) or remove (prefix with -) packages. tempwhitelist Print packages that are temporarily whitelisted. tempwhitelist [-u] [package ..] Temporarily place packages in whitelist for 10 seconds.
二、adb 指令 实操如下
Z90:/ # dumpsys deviceidle step lightdumpsys deviceidle step lightStepped to light: IDLE_MAINTENANCEZ90:/ # dumpsys deviceidle step deepdumpsys deviceidle step deepStepped to deep: IDLE_PENDINGZ90:/ # dumpsys deviceidle force-idle lightdumpsys deviceidle force-idle lightNow forced in to light idle modeZ90:/ # dumpsys deviceidle force-idle deepdumpsys deviceidle force-idle deepNow forced in to deep idle modeZ90:/ # dumpsys deviceidle force-inactivedumpsys deviceidle force-inactiveLight state: OVERRIDE, deep state: IDLEZ90:/ # dumpsys deviceidle unforcedumpsys deviceidle unforceLight state: OVERRIDE, deep state: IDLEZ90:/ # dumpsys deviceidle get lightdumpsys deviceidle get lightOVERRIDEZ90:/ # dumpsys deviceidle get deepdumpsys deviceidle get deepIDLEZ90:/ # dumpsys deviceidle get forcedumpsys deviceidle get forcefalseZ90:/ # dumpsys deviceidle get screendumpsys deviceidle get screenfalseZ90:/ # dumpsys deviceidle get chargingdumpsys deviceidle get chargingfalseZ90:/ # dumpsys deviceidle get networkdumpsys deviceidle get networktrueZ90:/ # dumpsys deviceidle disable lightdumpsys deviceidle disable lightLight idle mode disabledZ90:/ # dumpsys deviceidle disable deepdumpsys deviceidle disable deepDeep idle mode disabledZ90:/ # dumpsys deviceidle disable alldumpsys deviceidle disable allZ90:/ # dumpsys deviceidle enable lightdumpsys deviceidle enable lightLight idle mode enableZ90:/ # dumpsys deviceidle enable deepdumpsys deviceidle enable deepDeep idle mode enabledZ90:/ # dumpsys deviceidle enable alldumpsys deviceidle enable allZ90:/ # dumpsys deviceidle whitelistdumpsys deviceidle whitelistsystem-excidle,com.android.providers.downloads,10001system-excidle,com.android.vending,10023system-excidle,com.google.android.gms,10014system,com.android.providers.downloads,10001system,com.google.android.gms,10014user,com.tencent.mm,10108user,com.vapp.aide.intl.arm64,10068user,com.google.android.gsf,10014user,com.tencent.mobileqq,10110user,com.facebook.katana,10092user,com.vapp.aide.intl,10025user,com.bsb.hike,10088Z90:/ # dumpsys deviceidle tempwhitelistdumpsys deviceidle tempwhitelist
三、具体源码
状态切换可以参考
http://blog.csdn.net/su749520/article/details/78570613
例如看状态切换
C:\Users\fadi.su>adb shell dumpsys battery unplugC:\Users\fadi.su>adb shell dumpsys deviceidle step deepStepped to deep: IDLE_PENDINGC:\Users\fadi.su>adb shell dumpsys deviceidle step deepStepped to deep: SENSINGC:\Users\fadi.su>adb shell dumpsys deviceidle step deepStepped to deep: LOCATINGC:\Users\fadi.su>adb shell dumpsys deviceidle step deepStepped to deep: IDLEC:\Users\fadi.su>adb shell dumpsys deviceidle step deepStepped to deep: IDLE_MAINTENANCEC:\Users\fadi.su>adb shell dumpsys deviceidle step deepStepped to deep: IDLEC:\Users\fadi.su>adb shell dumpsys deviceidle get deepIDLE
package com.android.server;/** * Keeps track of device idleness and drives low power mode based on that. */public class DeviceIdleController extends SystemService implements AnyMotionDetector.DeviceIdleCallback { int onShellCommand(Shell shell, String cmd) { PrintWriter pw = shell.getOutPrintWriter(); if ("step".equals(cmd)) { getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); synchronized (this) { long token = Binder.clearCallingIdentity(); String arg = shell.getNextArg(); try { if (arg == null || "deep".equals(arg)) { stepIdleStateLocked("s:shell"); pw.print("Stepped to deep: "); pw.println(stateToString(mState)); } else if ("light".equals(arg)) { stepLightIdleStateLocked("s:shell"); pw.print("Stepped to light: "); pw.println(lightStateToString(mLightState)); } else { pw.println("Unknown idle mode: " + arg); } } finally { Binder.restoreCallingIdentity(token); } } } else if ("force-idle".equals(cmd)) { getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); synchronized (this) { long token = Binder.clearCallingIdentity(); String arg = shell.getNextArg(); try { if (arg == null || "deep".equals(arg)) { if (!mDeepEnabled) { pw.println("Unable to go deep idle; not enabled"); return -1; } mForceIdle = true; becomeInactiveIfAppropriateLocked(); int curState = mState; while (curState != STATE_IDLE) { stepIdleStateLocked("s:shell"); if (curState == mState) { pw.print("Unable to go deep idle; stopped at "); pw.println(stateToString(mState)); exitForceIdleLocked(); return -1; } curState = mState; } pw.println("Now forced in to deep idle mode"); } else if ("light".equals(arg)) { mForceIdle = true; becomeInactiveIfAppropriateLocked(); int curLightState = mLightState; while (curLightState != LIGHT_STATE_IDLE) { stepIdleStateLocked("s:shell"); if (curLightState == mLightState) { pw.print("Unable to go light idle; stopped at "); pw.println(lightStateToString(mLightState)); exitForceIdleLocked(); return -1; } curLightState = mLightState; } pw.println("Now forced in to light idle mode"); } else { pw.println("Unknown idle mode: " + arg); } } finally { Binder.restoreCallingIdentity(token); } } } else if ("force-inactive".equals(cmd)) { getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); synchronized (this) { long token = Binder.clearCallingIdentity(); try { mForceIdle = true; becomeInactiveIfAppropriateLocked(); pw.print("Light state: "); pw.print(lightStateToString(mLightState)); pw.print(", deep state: "); pw.println(stateToString(mState)); } finally { Binder.restoreCallingIdentity(token); } } } else if ("unforce".equals(cmd)) { getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); synchronized (this) { long token = Binder.clearCallingIdentity(); try { exitForceIdleLocked(); pw.print("Light state: "); pw.print(lightStateToString(mLightState)); pw.print(", deep state: "); pw.println(stateToString(mState)); } finally { Binder.restoreCallingIdentity(token); } } } else if ("get".equals(cmd)) { getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); synchronized (this) { String arg = shell.getNextArg(); if (arg != null) { long token = Binder.clearCallingIdentity(); try { switch (arg) { case "light": pw.println(lightStateToString(mLightState)); break; case "deep": pw.println(stateToString(mState)); break; case "force": pw.println(mForceIdle); break; case "screen": pw.println(mScreenOn); break; case "charging": pw.println(mCharging); break; case "network": pw.println(mNetworkConnected); break; default: pw.println("Unknown get option: " + arg); break; } } finally { Binder.restoreCallingIdentity(token); } } else { pw.println("Argument required"); } } } else if ("disable".equals(cmd)) { getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); synchronized (this) { long token = Binder.clearCallingIdentity(); String arg = shell.getNextArg(); try { boolean becomeActive = false; boolean valid = false; if (arg == null || "deep".equals(arg) || "all".equals(arg)) { valid = true; if (mDeepEnabled) { mDeepEnabled = false; becomeActive = true; pw.println("Deep idle mode disabled"); } } if (arg == null || "light".equals(arg) || "all".equals(arg)) { valid = true; if (mLightEnabled) { mLightEnabled = false; becomeActive = true; pw.println("Light idle mode disabled"); } } if (becomeActive) { becomeActiveLocked((arg == null ? "all" : arg) + "-disabled", Process.myUid()); } if (!valid) { pw.println("Unknown idle mode: " + arg); } } finally { Binder.restoreCallingIdentity(token); } } } else if ("enable".equals(cmd)) { getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); synchronized (this) { long token = Binder.clearCallingIdentity(); String arg = shell.getNextArg(); try { boolean becomeInactive = false; boolean valid = false; if (arg == null || "deep".equals(arg) || "all".equals(arg)) { valid = true; if (!mDeepEnabled) { mDeepEnabled = true; becomeInactive = true; pw.println("Deep idle mode enabled"); } } if (arg == null || "light".equals(arg) || "all".equals(arg)) { valid = true; if (!mLightEnabled) { mLightEnabled = true; becomeInactive = true; pw.println("Light idle mode enable"); } } if (becomeInactive) { becomeInactiveIfAppropriateLocked(); } if (!valid) { pw.println("Unknown idle mode: " + arg); } } finally { Binder.restoreCallingIdentity(token); } } } else if ("enabled".equals(cmd)) { synchronized (this) { String arg = shell.getNextArg(); if (arg == null || "all".equals(arg)) { pw.println(mDeepEnabled && mLightEnabled ? "1" : 0); } else if ("deep".equals(arg)) { pw.println(mDeepEnabled ? "1" : 0); } else if ("light".equals(arg)) { pw.println(mLightEnabled ? "1" : 0); } else { pw.println("Unknown idle mode: " + arg); } } } else if ("whitelist".equals(cmd)) { String arg = shell.getNextArg(); if (arg != null) { getContext().enforceCallingOrSelfPermission( android.Manifest.permission.DEVICE_POWER, null); long token = Binder.clearCallingIdentity(); try { do { if (arg.length() < 1 || (arg.charAt(0) != '-' && arg.charAt(0) != '+' && arg.charAt(0) != '=')) { pw.println("Package must be prefixed with +, -, or =: " + arg); return -1; } char op = arg.charAt(0); String pkg = arg.substring(1); if (op == '+') { if (addPowerSaveWhitelistAppInternal(pkg)) { pw.println("Added: " + pkg); } else { pw.println("Unknown package: " + pkg); } } else if (op == '-') { if (removePowerSaveWhitelistAppInternal(pkg)) { pw.println("Removed: " + pkg); } } else { pw.println(getPowerSaveWhitelistAppInternal(pkg)); } } while ((arg=shell.getNextArg()) != null); } finally { Binder.restoreCallingIdentity(token); } } else { synchronized (this) { for (int j=0; j<mPowerSaveWhitelistAppsExceptIdle.size(); j++) { pw.print("system-excidle,"); pw.print(mPowerSaveWhitelistAppsExceptIdle.keyAt(j)); pw.print(","); pw.println(mPowerSaveWhitelistAppsExceptIdle.valueAt(j)); } for (int j=0; j<mPowerSaveWhitelistApps.size(); j++) { pw.print("system,"); pw.print(mPowerSaveWhitelistApps.keyAt(j)); pw.print(","); pw.println(mPowerSaveWhitelistApps.valueAt(j)); } for (int j=0; j<mPowerSaveWhitelistUserApps.size(); j++) { pw.print("user,"); pw.print(mPowerSaveWhitelistUserApps.keyAt(j)); pw.print(","); pw.println(mPowerSaveWhitelistUserApps.valueAt(j)); } } } } else if ("tempwhitelist".equals(cmd)) { long duration = 10000; String opt; while ((opt=shell.getNextOption()) != null) { if ("-u".equals(opt)) { opt = shell.getNextArg(); if (opt == null) { pw.println("-u requires a user number"); return -1; } shell.userId = Integer.parseInt(opt); } else if ("-d".equals(opt)) { opt = shell.getNextArg(); if (opt == null) { pw.println("-d requires a duration"); return -1; } duration = Long.parseLong(opt); } } String arg = shell.getNextArg(); if (arg != null) { try { addPowerSaveTempWhitelistAppChecked(arg, duration, shell.userId, "shell"); } catch (Exception e) { pw.println("Failed: " + e); return -1; } } else { dumpTempWhitelistSchedule(pw, false); } } else if ("except-idle-whitelist".equals(cmd)) { getContext().enforceCallingOrSelfPermission( android.Manifest.permission.DEVICE_POWER, null); final long token = Binder.clearCallingIdentity(); try { String arg = shell.getNextArg(); if (arg == null) { pw.println("No arguments given"); return -1; } else if ("reset".equals(arg)) { resetPowerSaveWhitelistExceptIdleInternal(); } else { do { if (arg.length() < 1 || (arg.charAt(0) != '-' && arg.charAt(0) != '+' && arg.charAt(0) != '=')) { pw.println("Package must be prefixed with +, -, or =: " + arg); return -1; } char op = arg.charAt(0); String pkg = arg.substring(1); if (op == '+') { if (addPowerSaveWhitelistExceptIdleInternal(pkg)) { pw.println("Added: " + pkg); } else { pw.println("Unknown package: " + pkg); } } else if (op == '=') { pw.println(getPowerSaveWhitelistExceptIdleInternal(pkg)); } else { pw.println("Unknown argument: " + arg); return -1; } } while ((arg = shell.getNextArg()) != null); } } finally { Binder.restoreCallingIdentity(token); } } else { return shell.handleDefaultCommands(cmd); } return 0; }
阅读全文
0 0
- Doze模式adb shell命令集
- Android Doze模式使用命令启用和恢复
- adb命令之adb shell
- 【adb】adb shell 命令详解
- adb shell 命令
- Android adb shell 命令
- Android adb shell 命令
- Android adb shell 命令
- Android adb shell 命令
- Android adb shell 命令
- adb shell 命令
- adb shell命令
- adb shell dumpsys 命令
- adb shell 命令
- adb shell 命令
- adb shell 命令
- android adb shell命令
- adb shell 命令详解
- DMA知识
- 判断是否有jar包冲突
- JAVA之网络编程
- vue-cli搭建vue项目
- 浏览器和服务器实现跨域(CORS)
- Doze模式adb shell命令集
- BOM(Browser Object Model)
- 集线器(HUB),交换机(Switch),路由器
- JAXB 将xml转对象以及处理对象中的集合
- 暴力破解算法——寻找密码(递归方法)
- SIFT算法中概念简单解释
- 字段拼接二:使用转置
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence(构造,思路)
- AWS正式把KVM投入使用 你需要知道些什么?