/** * 判断网络是否链接 未链接弹出设置对话框 想访问网络状态, * 首先得添加权限 <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>