使用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>

 

posted @ 2014-07-30 11:20  仰望 星空  阅读(2975)  评论(0编辑  收藏