当前位置:   article > 正文

2022-07-30 Androd 进入深度休眠后把WIFI给关掉,唤醒之后重新打开WIFI_android 11 休眠时关闭网络服务

android 11 休眠时关闭网络服务

一、App中进行wifi的打开与关闭的方法,这个方法在androd8真机上测试是可以,但是android11 就需要系统app才可以

  1. 1、AndroidManifest.xml 里面增加权限
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  3. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  4. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
  6. 2、初始化管理器
  7. WifiManager wifiManager=(WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
  8. 3、操作:
  9. wifiManager.setWifiEnabled(false);
  10. wifiManager.setWifiEnabled(true);

二、Androd 进入深度休眠后把WIFI给关掉,唤醒之后重新打开WIFI的实现方法

     1、第一步得获取灭屏幕时候是不是进入深度休眠,进入深度休眠后系统会把很多电源给关掉省功耗。wakeup_sources节点下active_since项为非0的锁就是目前上锁的。

kernel\drivers\base\power\wakeup.c

      2、休眠、唤醒的入口分别在frameworks\base\services\core\java\com\android\server\power\PowerManagerService.java的wakeUpNoUpdateLocked、goToSleepNoUpdateLocked

      3、系统要进入休眠前判断一下是否是深度休眠,如果是深度休眠,就把WIFI给关了。系统唤醒后,判断一下之前的休眠是不是把WIFI给关了,如果是,重新打开WIFI。

      4、上层frameworks修改的内容

  1. diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
  2. old mode 100644
  3. new mode 100755
  4. index af7d91c..921c107
  5. --- a/services/core/java/com/android/server/power/PowerManagerService.java
  6. +++ b/services/core/java/com/android/server/power/PowerManagerService.java
  7. @@ -119,6 +119,19 @@ import java.util.Arrays;
  8. import java.util.List;
  9. import java.util.Objects;
  10. +import java.io.File;
  11. +import java.io.FileInputStream;
  12. +import java.io.FileNotFoundException;
  13. +import java.io.FileOutputStream;
  14. +import java.io.PrintWriter;
  15. +import java.io.IOException;
  16. +
  17. +import java.io.BufferedReader;
  18. +import java.io.InputStreamReader;
  19. +import java.io.*;
  20. +import android.net.wifi.WifiManager;
  21. +import android.os.SystemProperties;
  22. +
  23. /**
  24. * The power manager service is responsible for coordinating power management
  25. * functions on the device.
  26. @@ -507,6 +520,9 @@ public final class PowerManagerService extends SystemService
  27. public final float mScreenBrightnessMinimumVr;
  28. public final float mScreenBrightnessMaximumVr;
  29. public final float mScreenBrightnessDefaultVr;
  30. + public boolean mdisablewifiafterscreenoff = false ;
  31. + public WifiManager wifiManager;
  32. + public boolean DeepSleepCloseWIFI = false;
  33. // The screen brightness mode.
  34. // One of the Settings.System.SCREEN_BRIGHTNESS_MODE_* constants.
  35. @@ -1052,6 +1068,8 @@ public final class PowerManagerService extends SystemService
  36. mAttentionDetector.systemReady(mContext);
  37. PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
  38. + wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
  39. + DeepSleepCloseWIFI = SystemProperties.getBoolean("persist.deepsleep.closewifi", false);
  40. mScreenBrightnessSettingMinimum = pm.getBrightnessConstraint(
  41. PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
  42. mScreenBrightnessSettingMaximum = pm.getBrightnessConstraint(
  43. @@ -1689,6 +1707,13 @@ public final class PowerManagerService extends SystemService
  44. Trace.asyncTraceBegin(Trace.TRACE_TAG_POWER, TRACE_SCREEN_ON, 0);
  45. Trace.traceBegin(Trace.TRACE_TAG_POWER, "wakeUp");
  46. +
  47. + if(mdisablewifiafterscreenoff && DeepSleepCloseWIFI)
  48. + {
  49. + if (!wifiManager.isWifiEnabled())
  50. + wifiManager.setWifiEnabled(true);
  51. + }
  52. +
  53. try {
  54. Slog.i(TAG, "Waking up from "
  55. + PowerManagerInternal.wakefulnessToString(getWakefulnessLocked())
  56. @@ -1749,8 +1774,43 @@ public final class PowerManagerService extends SystemService
  57. reason = Math.min(PowerManager.GO_TO_SLEEP_REASON_MAX,
  58. Math.max(reason, PowerManager.GO_TO_SLEEP_REASON_MIN));
  59. Slog.i(TAG, "Going to sleep due to " + PowerManager.sleepReasonToString(reason)
  60. - + " (uid " + uid + ")...");
  61. -
  62. + + " (uid " + uid + ")..."+" DeepSleepCloseWIFI:"+DeepSleepCloseWIFI);
  63. +
  64. + if(DeepSleepCloseWIFI)
  65. + {
  66. + String content = "";
  67. + boolean check_enter_deep_sleep = true;
  68. + File file = new File("/sys/kernel/debug/wakeup_sources");
  69. + if ((file != null) && file.exists()) {
  70. + try {
  71. + FileInputStream fin = new FileInputStream(file);
  72. + BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
  73. + StringBuffer stringBuffer = new StringBuffer();
  74. + while ((content = reader.readLine()) != null)
  75. + {
  76. + stringBuffer.append(content+"\n");
  77. + if(content.contains("<systemwakeuped>wake_lock_always")
  78. + || content.contains("<systemwakeuped>rockchip_otg"))
  79. + check_enter_deep_sleep = false;
  80. + }
  81. + //Slog.i(TAG, "/sys/kernel/debug/wakeup_sources content : \r\n" + stringBuffer.toString());
  82. + fin.close();
  83. + } catch (Exception e) {
  84. + e.printStackTrace();
  85. + }
  86. + }
  87. + if(check_enter_deep_sleep)
  88. + {
  89. + if (wifiManager.isWifiEnabled()) {
  90. + Slog.i(TAG, "Deep sleep mode,Close WIFI.\r\n");
  91. + wifiManager.setWifiEnabled(false);
  92. + mdisablewifiafterscreenoff = true;
  93. + } else {
  94. + mdisablewifiafterscreenoff = false;
  95. + }
  96. + }else
  97. + Slog.i(TAG, "The system will not enter deep sleep mode.\r\n");
  98. + }
  99. mLastSleepTime = eventTime;
  100. mLastSleepReason = reason;
  101. mSandmanSummoned = true;

5、进入普通休眠不会关掉WIFi。

 6、进入深度休眠之前把WIFI给关掉。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/301710
推荐阅读
相关标签
  

闽ICP备14008679号