Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

网友投稿 851 2022-05-30

文章目录

一、获取 WIFI 状态

二、主动获取 WIFI 状态

三、被动获取 WIFI 状态

参考 Google 官方文档 : 优化电池续航时间

一、获取 WIFI 状态

在应用中执行某些操作 , 如软件云端备份 , 从服务器端获取最新版本号 , 从服务器端缓存最新软件安装包 , 固件版本 , 等操作 ,

最好都在 WIFI 状态下执行

, 获取 WIFI 的状态也是两种情况 , 分别是

主动获取 WIFI 状态 ,

被动获取 WIFI 状态 ;

上述操作 ,

也建议在手机上充电的状态下执行 ;

二、主动获取 WIFI 状态

1 . 获取 WIFI 状态 : WIFI 状态可以使用

ConnectivityManager

获取 , 调用 getActiveNetworkInfo 方法获取 NetworkInfo 后 , 先判定当前网络是否连接 , 再判断当前的 网络类型 是否是

ConnectivityManager.TYPE_WIFI

;

① 获取连接管理器 : 调用 Context 上下文的

getSystemService(Context.CONNECTIVITY_SERVICE)

方法 , 跨进程获取 ConnectivityManager 服务 ;

// 获取连接管理器 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

1

2

3

② 获取网络信息 :

调用 ConnectivityManager 的 getActiveNetworkInfo 方法

, 获取当前网络信息 , 该操作需要

android.Manifest.permission.ACCESS_NETWORK_STATE

权限 ;

NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

1

③ 判断当前是否已经连接 :

调用 NetworkInfo 对象的 isConnected 方法

, 可以查看该网络的连接状态 , WIFI , 移动蜂窝网络 等有一种连接 , 就会返回 True ;

networkInfo.isConnected()

1

④ 判断连接类型 :

调用 NetworkInfo 对象的 getType() 方法

, 可以获取当前的连接状态 ,

如果连接状态是 ConnectivityManager.TYPE_WIFI , 就说明当前是 WIFI 网络 ;

networkInfo.getType() == ConnectivityManager.TYPE_WIFI

1

2 . 代码示例 :

package kim.hsl.bp; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; public class WiflUtils { /** * 主动获取当前是否正在使用 WIFI * @return */ public static boolean isWifi(Context context){ boolean isWifi = false; // 获取连接管理器 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // 获取网络信息 NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); // 判定是否是 WIFI if(networkInfo != null && networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI){ isWifi = true; } return isWifi; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

三、被动获取 WIFI 状态

1 . 广播接收者 : 该广播接收者监听系统的

android.intent.action.CONNECTIVITY_CHANGE

事件 , 当接收到系统发出的广播后 , 就判定一次当前是否是 WIFI 状态 ;

package kim.hsl.bp; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.text.TextUtils; import android.util.Log; /** * 被动获取网络状态 * 网络状态发生变化时 , 系统发出的广播 , 使用广播接受者接收这些广播 */ public class WifiReceiver extends BroadcastReceiver { public static final String TAG = "WifiReceiver"; @Override public void onReceive(Context context, Intent intent) { boolean isWifi = WiflUtils.isWifi(context); if(isWifi){ Log.i(TAG, "WIFI 启用"); }else{ Log.i(TAG, "WIFI 停用"); } } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

2 . 注册广播接收者与权限 : 在 AndroidManifest.xml 中 , 注册上述广播接收者 , 声明使用到的网络相关权限 ;

ACCESS_NETWORK_STATE : 获取运营商信息权限 ;

ACCESS_WIFI_STATE : 获取 WIFI 网络信息权限 ;

CHANGE_WIFI_STATE : 获取改变 WIFI 状态权限 ;

INTERNET : 获取访问网络权限 ;

READ_PHONE_STATE : 读取手机状态权限 ;

WAKE_LOCK : 后台服务保持唤醒权限 ;

1

2

【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

Android 网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:DRS数据复制体验第三关-MySQL与GaussDB(for openGauss)间的DRS同步任务创建。
下一篇:Visual C++文件后缀名释义
相关文章