網絡連接狀態對那些依賴網絡的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>