/** * 判斷網絡是否鏈接 未鏈接彈出設置對話框 想訪問網絡狀態, * 首先得添加權限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> * NetworkInfo類包含了對wifi和mobile兩種網絡模式鏈接的詳細描述, * 經過其getState()方法獲取的State對象則表明着鏈接成功與否等狀態 */ public void CheckNetworkState() { boolean flag = false; // 主要管理和網絡鏈接相關的操做 ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 獲取表明聯網狀態的NetworkInfo對象 NetworkInfo netInfo = manager.getActiveNetworkInfo(); boolean isAvailable = netInfo.isAvailable(); if (isAvailable) { // 網絡鏈接可用 } else { // 網絡鏈接不可用 } // 獲取GPRS鏈接狀態 State moblie = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState(); if (moblie == State.CONNECTED || moblie == State.CONNECTING) { // GPRS網絡已鏈接 return; } else { // 跳轉至網絡鏈接設置界面 startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS)); } // 獲取Wifi鏈接狀態 State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); if (wifi == State.CONNECTED || wifi == State.CONNECTING) { // Wifi網絡鏈接 return; } else { // 跳轉至wifi網絡鏈接設置界面 startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS)); } //彈出提示對話框 showAlterDialog(); } private void showAlterDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(""); builder.setPositiveButton("肯定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // 跳轉至網絡設置頁面 startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }); }
1.程序第一次啓動時會收到一個Broadcastjava
2.從 GPRS 到 WIFI,程序至少會收到3個Broadcast android
第一個是鏈接到WIFI git
第二個是斷開GPRS 網絡
第三個是鏈接到WIFI ide
3.從WIFI到GPRS,程序至少會收到2個Broadcast ui
第一個是斷開Wifi this
第二個是鏈接到GPRS spa
private BroadcastReceiver mReceiver; private ConnectivityManager mConnectivityManager; private IntentFilter mIntenFilter;
mIntenFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); mConnectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) { Log.i(TAG, "netWork has lost"); } NetworkInfo tmpInfo = (NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); Log.i(TAG, tmpInfo.toString() + " {isConnected = " + tmpInfo.isConnected() + "}"); } };
註冊Receiver,監聽網絡變化:.net
registerReceiver(mReceiver, mIntenFilter);
取消註冊,再也不監聽網絡變化: code
unregisterReceiver(mReceiver);
也可在AndroidManifest.xml中註冊BroadcastReceiver
<receiver android:name=".ConnectionReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>