一、adb 指令

1.1 让设备进入未连接充电的模式

进行doze模式命令模拟的话,需要先下发该命令,因为只要存在充电状态,是无法从Acitve状态切换到InActive状态的

adb shell dumpsys battery unplug

Z90:/ # dumpsys battery unplug
dumpsys battery unplug

1.2 退出Doze模式,让手机恢复正常需要复位充电模式

不使用doze命令模拟的时候,记得退出这个模式,不然电池电量状态可能不更新哦

adb shell dumpsys battery reset

Z90:/ # dumpsys battery reset
dumpsys battery reset

1.3 Doze Help 命令查询

adb shell dumpsys deviceidle -h

Z90:/ # dumpsys deviceidle -h
dumpsys deviceidle -hDevice idle controller (deviceidle) commands:helpPrint 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-inactiveForce to be inactive, ready to freely step idle states.unforceResume 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.whitelistPrint currently whitelisted apps.whitelist [package ...]Add (prefix with +) or remove (prefix with -) packages.tempwhitelistPrint packages that are temporarily whitelisted.tempwhitelist [-u] [package ..]Temporarily place packages in whitelist for 10 seconds.

二、adb 指令 实操如下

Z90:/ # dumpsys deviceidle step light
dumpsys deviceidle step light
Stepped to light: IDLE_MAINTENANCEZ90:/ # dumpsys deviceidle step deep
dumpsys deviceidle step deep
Stepped to deep: IDLE_PENDINGZ90:/ # dumpsys deviceidle force-idle light
dumpsys deviceidle force-idle light
Now forced in to light idle modeZ90:/ # dumpsys deviceidle force-idle deep
dumpsys deviceidle force-idle deep
Now forced in to deep idle modeZ90:/ # dumpsys deviceidle force-inactive
dumpsys deviceidle force-inactive
Light state: OVERRIDE, deep state: IDLEZ90:/ # dumpsys deviceidle unforce
dumpsys deviceidle unforce
Light state: OVERRIDE, deep state: IDLEZ90:/ # dumpsys deviceidle get light
dumpsys deviceidle get light
OVERRIDE
Z90:/ # dumpsys deviceidle get deep
dumpsys deviceidle get deep
IDLEZ90:/ # dumpsys deviceidle get force
dumpsys deviceidle get force
falseZ90:/ # dumpsys deviceidle get screen
dumpsys deviceidle get screen
falseZ90:/ # dumpsys deviceidle get charging
dumpsys deviceidle get charging
falseZ90:/ # dumpsys deviceidle get network
dumpsys deviceidle get network
trueZ90:/ # dumpsys deviceidle disable light
dumpsys deviceidle disable light
Light idle mode disabledZ90:/ # dumpsys deviceidle disable deep
dumpsys deviceidle disable deep
Deep idle mode disabledZ90:/ # dumpsys deviceidle disable all
dumpsys deviceidle disable allZ90:/ # dumpsys deviceidle enable light
dumpsys deviceidle enable light
Light idle mode enable
Z90:/ # dumpsys deviceidle enable deep
dumpsys deviceidle enable deep
Deep idle mode enabled
Z90:/ # dumpsys deviceidle enable all
dumpsys deviceidle enable allZ90:/ # dumpsys deviceidle whitelist
dumpsys deviceidle whitelist
system-excidle,com.android.providers.downloads,10001
system-excidle,com.android.vending,10023
system-excidle,com.google.android.gms,10014
system,com.android.providers.downloads,10001
system,com.google.android.gms,10014
user,com.tencent.mm,10108
user,com.vapp.aide.intl.arm64,10068
user,com.google.android.gsf,10014
user,com.tencent.mobileqq,10110
user,com.facebook.katana,10092
user,com.vapp.aide.intl,10025
user,com.bsb.hike,10088Z90:/ # dumpsys deviceidle tempwhitelist
dumpsys 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 deep
Stepped to deep: IDLE_PENDINGC:\Users\fadi.su>adb shell dumpsys deviceidle step deep
Stepped to deep: SENSINGC:\Users\fadi.su>adb shell dumpsys deviceidle step deep
Stepped to deep: LOCATINGC:\Users\fadi.su>adb shell dumpsys deviceidle step deep
Stepped to deep: IDLEC:\Users\fadi.su>adb shell dumpsys deviceidle step deep
Stepped to deep: IDLE_MAINTENANCEC:\Users\fadi.su>adb shell dumpsys deviceidle step deep
Stepped to deep: IDLEC:\Users\fadi.su>adb shell dumpsys deviceidle get deep
IDLE
package com.android.server;/*** Keeps track of device idleness and drives low power mode based on that.*/
public class DeviceIdleController extends SystemServiceimplements 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;}

Doze模式adb shell命令集相关推荐

  1. android ADB shell 命令启动 android程序

    今天用eclipase写了个android程序,主要用到了service.activity.broadcast,在安卓系统手机上调试通过,现在想用ADB shell命令启动这个程序,使达到的效果和在e ...

  2. adb shell 命令详解,android, adb logcat

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  3. dos命令行输入adb shell命令为什么报错

    在命令行(就是开始--运行--输入cmd)模式下输入adb shell命令一般会报两种错误,一是"adb不是内部命令或外部命令,也不是可运行的程序或批处理文件",二是"e ...

  4. Android 常用adb shell 命令

    原文地址http://blog.csdn.net/rain_butterfly/article/details/40894807 调试Android程序有时需要adb shell 命令,adb全称An ...

  5. EasyClick adb shell命令大全

    EasyClick adb.shell命令大全目录 EasyClick adb.shell命令大全 ADB包安装步骤 使用教程 ADB高级命令 Android 常用的Linux命令 Android a ...

  6. adb shell命令

    adb查看当前activity无效(adb查看所有应用包名) 前面给大家分享了Airtest,感兴趣的小伙伴,可以前往:手机自动化测试IDE-–Airtest实战篇.手机自动化测试IDE -– 手把手 ...

  7. Adb shell命令打电话测试4G

    Adb shell命令打电话测试4G 在没有显示屏的情况下,怎么测试4G的打电话和上网功能: 1.上网功能测试 用route命令看路由信息 Kernel IP routing tableDestina ...

  8. 怎么打开python shell_Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发 ...

  9. python调用adb shell命令_Python之使用adb shell命令启动应用的方法详解

    Python之使用adb shell命令启动应用的方法详解 一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具 ...

最新文章

  1. LINQ to SQL 运行时动态构建查询条件
  2. android make 没反应
  3. android读取网页标题,如何获取WebView中页面的Title信息
  4. map()和zip()操作
  5. Android之如何用dextra.ELF64查看安卓手机“设置“图标的源代码
  6. 机器学习之拉格朗日乘子法和 KKT
  7. 获得Open Images冠军,商汤TSD目标检测算法入选CVPR 2020 ​
  8. linux中断机制--理解中断上半部/下半部、软中断、tasklet、工作队列(可调度、可睡眠)
  9. (74)信号发生器DDS三角波设计(二)(第15天)
  10. Java从零开始学三(public class和class)
  11. 3.14 在金山做的动态建模讲座
  12. 怎样让硬盘分区显示整数大小
  13. 21王道计算机网络pdf百度云,王道计算机网络第五章.pdf
  14. 根号二怎么不用计算机算,[转载]开根号,不用计算器你会么?
  15. wav音乐里面竟然有病毒?
  16. 蒙特卡洛 光 matlab,用蒙特卡罗法模拟光散射问题
  17. 工厂都离不开的“人机料法环”
  18. Python并发编程之进程间通信
  19. Linux awk 命令详解
  20. 我手中的电子书书目清单(开始提供BT下载)

热门文章

  1. immutable java_Java多线程基础(四)——Immutable模式
  2. java绝对路径相对路径_java绝对路径和相对路径的理解
  3. 如何在手机APP中集成测试车牌识别sdk
  4. zookeeper原理及应用
  5. LeetCode 867. 转置矩阵(java实现)
  6. HTML5+CSS大作业——明星个人-赵丽颖(7页)带表单带音乐表格布局
  7. CPU 使用率过高报警,我要原地爆炸了
  8. 领衔安卓超越iPhone,vivo X20性能体验已获王者荣耀联赛测试认证
  9. 实验4·使用HBase Shell完成《王者荣耀》玩家信息管理
  10. 优漫动游零基础学平面设计,该报班还是自学?