【Android 電量優化】電量優化 ( 網絡狀態獲取 | 主動獲取 WIFI 狀態 | 被動獲取 WIFI 狀態 )
文章目錄
一、獲取 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
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小時內刪除侵權內容。