【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);② 獲取網絡信息 : 調用 ConnectivityManager 的 getActiveNetworkInfo 方法 , 獲取當前網絡信息 , 該操作需要 android.Manifest.permission.ACCESS_NETWORK_STATE 權限 ;
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();③ 判斷當前是否已經連接 : 調用 NetworkInfo 對象的 isConnected 方法 , 可以查看該網絡的連接狀態 , WIFI , 移動蜂窩網絡 等有一種連接 , 就會返回 True ;
networkInfo.isConnected()④ 判斷連接類型 : 調用 NetworkInfo 對象的 getType() 方法 , 可以獲取當前的連接狀態 , 如果連接狀態是 ConnectivityManager.TYPE_WIFI , 就說明當前是 WIFI 網絡 ;
networkInfo.getType() == ConnectivityManager.TYPE_WIFI2 . 代碼示例 :
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();// 判定是否是 WIFIif(networkInfo != null && networkInfo.isConnected() &&networkInfo.getType() == ConnectivityManager.TYPE_WIFI){isWifi = true;}return isWifi;} }三、被動獲取 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";@Overridepublic void onReceive(Context context, Intent intent) {boolean isWifi = WiflUtils.isWifi(context);if(isWifi){Log.i(TAG, "WIFI 啟用");}else{Log.i(TAG, "WIFI 停用");}} }2 . 注冊廣播接收者與權限 : 在 AndroidManifest.xml 中 , 注冊上述廣播接收者 , 聲明使用到的網絡相關權限 ;
- ACCESS_NETWORK_STATE : 獲取運營商信息權限 ;
- ACCESS_WIFI_STATE : 獲取 WIFI 網絡信息權限 ;
- CHANGE_WIFI_STATE : 獲取改變 WIFI 狀態權限 ;
- INTERNET : 獲取訪問網絡權限 ;
- READ_PHONE_STATE : 讀取手機狀態權限 ;
- WAKE_LOCK : 后臺服務保持喚醒權限 ;
總結
以上是生活随笔為你收集整理的【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 电量优化】电量优化 (
- 下一篇: 【Android 电量优化】电量优化 (