Android 監聽網路連線狀態
阿新 • • 發佈:2018-12-21
Android手機在網路狀態發生改變的時候回傳送一條廣播。通過日誌列印,可以看到該條廣播的Action為:android.net.conn.CONNECTIVITY_CHANGE,但是在網路斷開和連線的時候或者由WIFI轉為行動網路的時候傳送的廣播的Action同為上述的Action,那麼我們如何知道當前是網路連線還是斷開呢?接下來我們就會用到ConnectivityManager這個類,ConnectivityManager可以通過獲取系統Service獲得:
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
通過connectivityManager又可以獲得WIFI網路或者行動網路的連線狀態
NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
因此,我們可以自定義一個BroadcastReceiver,監聽到網路狀態後通過介面將該狀態對外暴露出去
public class NetBroadcastReceiver extends BroadcastReceiver { private NetConnectedListener netConnectedListener; @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) { //WIFI和行動網路均未連線 netContentListener.netContent(false); } else { //WIFI連線或者行動網路連線 netContentListener.netContent(true); } } public void setNetConnectedListener(NetConnectedListener netConnectedListener) { this.netConnectedListener = netConnectedListener; } public interface NetConnectedListener { void netContent(boolean isConnected); } }
然後在需要監聽此狀態的Activity中動態註冊該BroadcastReceiver即可
NetBroadcastReceiver receiver = new NetBroadcastReceiver(); IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); this.registerReceiver(receiver, filter); receiver.setNetContentListener(new NetBroadcastReceiver.NetContentListener() { @Override public void netContent(boolean isConnected) { //在此處處理具體業務即可 } });