赞
踩
一、App中进行wifi的打开与关闭的方法,这个方法在androd8真机上测试是可以,但是android11 就需要系统app才可以。
- 1、AndroidManifest.xml 里面增加权限
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
-
-
- 2、初始化管理器
-
- WifiManager wifiManager=(WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
-
- 3、操作:
- wifiManager.setWifiEnabled(false);
- 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修改的内容
- diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
- old mode 100644
- new mode 100755
- index af7d91c..921c107
- --- a/services/core/java/com/android/server/power/PowerManagerService.java
- +++ b/services/core/java/com/android/server/power/PowerManagerService.java
- @@ -119,6 +119,19 @@ import java.util.Arrays;
- import java.util.List;
- import java.util.Objects;
-
- +import java.io.File;
- +import java.io.FileInputStream;
- +import java.io.FileNotFoundException;
- +import java.io.FileOutputStream;
- +import java.io.PrintWriter;
- +import java.io.IOException;
- +
- +import java.io.BufferedReader;
- +import java.io.InputStreamReader;
- +import java.io.*;
- +import android.net.wifi.WifiManager;
- +import android.os.SystemProperties;
- +
- /**
- * The power manager service is responsible for coordinating power management
- * functions on the device.
- @@ -507,6 +520,9 @@ public final class PowerManagerService extends SystemService
- public final float mScreenBrightnessMinimumVr;
- public final float mScreenBrightnessMaximumVr;
- public final float mScreenBrightnessDefaultVr;
- + public boolean mdisablewifiafterscreenoff = false ;
- + public WifiManager wifiManager;
- + public boolean DeepSleepCloseWIFI = false;
-
- // The screen brightness mode.
- // One of the Settings.System.SCREEN_BRIGHTNESS_MODE_* constants.
- @@ -1052,6 +1068,8 @@ public final class PowerManagerService extends SystemService
- mAttentionDetector.systemReady(mContext);
-
- PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- + wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
- + DeepSleepCloseWIFI = SystemProperties.getBoolean("persist.deepsleep.closewifi", false);
- mScreenBrightnessSettingMinimum = pm.getBrightnessConstraint(
- PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
- mScreenBrightnessSettingMaximum = pm.getBrightnessConstraint(
- @@ -1689,6 +1707,13 @@ public final class PowerManagerService extends SystemService
- Trace.asyncTraceBegin(Trace.TRACE_TAG_POWER, TRACE_SCREEN_ON, 0);
-
- Trace.traceBegin(Trace.TRACE_TAG_POWER, "wakeUp");
- +
- + if(mdisablewifiafterscreenoff && DeepSleepCloseWIFI)
- + {
- + if (!wifiManager.isWifiEnabled())
- + wifiManager.setWifiEnabled(true);
- + }
- +
- try {
- Slog.i(TAG, "Waking up from "
- + PowerManagerInternal.wakefulnessToString(getWakefulnessLocked())
- @@ -1749,8 +1774,43 @@ public final class PowerManagerService extends SystemService
- reason = Math.min(PowerManager.GO_TO_SLEEP_REASON_MAX,
- Math.max(reason, PowerManager.GO_TO_SLEEP_REASON_MIN));
- Slog.i(TAG, "Going to sleep due to " + PowerManager.sleepReasonToString(reason)
- - + " (uid " + uid + ")...");
- -
- + + " (uid " + uid + ")..."+" DeepSleepCloseWIFI:"+DeepSleepCloseWIFI);
- +
- + if(DeepSleepCloseWIFI)
- + {
- + String content = "";
- + boolean check_enter_deep_sleep = true;
- + File file = new File("/sys/kernel/debug/wakeup_sources");
- + if ((file != null) && file.exists()) {
- + try {
- + FileInputStream fin = new FileInputStream(file);
- + BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
- + StringBuffer stringBuffer = new StringBuffer();
- + while ((content = reader.readLine()) != null)
- + {
- + stringBuffer.append(content+"\n");
- + if(content.contains("<systemwakeuped>wake_lock_always")
- + || content.contains("<systemwakeuped>rockchip_otg"))
- + check_enter_deep_sleep = false;
- + }
- + //Slog.i(TAG, "/sys/kernel/debug/wakeup_sources content : \r\n" + stringBuffer.toString());
- + fin.close();
- + } catch (Exception e) {
- + e.printStackTrace();
- + }
- + }
- + if(check_enter_deep_sleep)
- + {
- + if (wifiManager.isWifiEnabled()) {
- + Slog.i(TAG, "Deep sleep mode,Close WIFI.\r\n");
- + wifiManager.setWifiEnabled(false);
- + mdisablewifiafterscreenoff = true;
- + } else {
- + mdisablewifiafterscreenoff = false;
- + }
- + }else
- + Slog.i(TAG, "The system will not enter deep sleep mode.\r\n");
- + }
- mLastSleepTime = eventTime;
- mLastSleepReason = reason;
- mSandmanSummoned = true;

5、进入普通休眠不会关掉WIFi。
6、进入深度休眠之前把WIFI给关掉。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。