使用ConnectivityManager 判斷網絡是否連接


網絡連接狀態對那些依賴網絡的APP是必須的。以下有兩種方法實現了對網絡的檢查。組合使用效果更加

 

第一中方法:使用ConnectivityManager 檢查網絡連接

主要步驟:

(1)獲取ConnectivityManager對象。

(2)使用ConnectivityManager對象的getActiveNetworkInfo獲取NetworkInfo 對象。

(3)使用ConnectivityManager對象的getNetworkInfo獲取NetworkInfo對象,然后調用NetworkInfo 的getState方法返回網絡連接類型

 

/**
     * 測試ConnectivityManager ConnectivityManager主要管理和網絡連接相關的操作
     * 相關的TelephonyManager則管理和手機、運營商等的相關信息;WifiManager則管理和wifi相關的信息。
     * 想訪問網絡狀態,首先得添加權限<uses-permission
     * android:name="android.permission.ACCESS_NETWORK_STATE"/>
     * NetworkInfo類包含了對wifi和mobile兩種網絡模式連接的詳細描述,通過其getState()方法獲取的State對象則代表着
     * 連接成功與否等狀態。
     * 
     */
    public void testConnectivityManager() {
        ConnectivityManager connManager = (ConnectivityManager) this
                .getSystemService(CONNECTIVITY_SERVICE);
        // 獲取代表聯網狀態的NetWorkInfo對象
        NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
        // 獲取當前的網絡連接是否可用
        if (null == networkInfo) {
            Toast.makeText(this, "當前的網絡連接不可用", Toast.LENGTH_SHORT).show();
            // 當網絡不可用時,跳轉到網絡設置頁面
            startActivityForResult(new Intent(
                    android.provider.Settings.ACTION_WIRELESS_SETTINGS), 1);

        } else {
            boolean available = networkInfo.isAvailable();
            if (available) {
                Log.i("通知", "當前的網絡連接可用");
                Toast.makeText(this, "當前的網絡連接可用", Toast.LENGTH_SHORT).show();
            } else {
                Log.i("通知", "當前的網絡連接不可用");
                Toast.makeText(this, "當前的網絡連接不可用", Toast.LENGTH_SHORT).show();
            }
        }

        State state = connManager.getNetworkInfo(
                ConnectivityManager.TYPE_MOBILE).getState();
        if (State.CONNECTED == state) {
            Log.i("通知", "GPRS網絡已連接");
            Toast.makeText(this, "GPRS網絡已連接", Toast.LENGTH_SHORT).show();
        }

        state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                .getState();
        if (State.CONNECTED == state) {
            Log.i("通知", "WIFI網絡已連接");
            Toast.makeText(this, "WIFI網絡已連接", Toast.LENGTH_SHORT).show();
        }

        // // 跳轉到無線網絡設置界面
        // startActivity(new
        // Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
        // // 跳轉到無限wifi網絡設置界面
        // startActivity(new
        // Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));

    }

 PS:代碼是我從一個不知名的論壇粘貼過來的。本人為測試

 

第二種:使用BroadcasetReceiver監聽網絡連接

public class NetworkStateReceiver extends BroadcastReceiver {

        private static final String TAG = "NetworkStateReceiver";

        @Override
        public void onReceive(Context context, Intent intent) {
            
            if (!isNetworkAvailable(context)) {
                Toast.makeText(context, "網絡已經斷開!", 0).show();
            } else
                Toast.makeText(context, "網絡已經連接", 0).show();
        }

        /**
         * 網絡是否可用
         * 
         * @param context
         * @return
         */
        public static boolean isNetworkAvailable(Context context) {
            //獲取ConnectivityManager對象
            ConnectivityManager mgr = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            //獲取當前網絡連接列表
            NetworkInfo[] info = mgr.getAllNetworkInfo();
            if (info != null) {
                //遍歷網絡信息
                for (int i = 0; i < info.length; i++) {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
            }
            return false;
        }

    }

 

 

別忘了在AndroidManifest.xml 文件中配置Receiver

<receiver android:name=".NetworkStateReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</receiver>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM