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

使用ConnectivityManager 判断网络是否连接

时间: 2024-08-13 02:48:30

使用ConnectivityManager 判断网络是否连接的相关文章

判断网络是否连接 和 判断GPS是否连接

//判断网络是否连接 public static Boolean isNetworkEnabled(Context context){ int status=-1  //设置默认连接的状态为-1 ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connec

Android判断网络是否连接

<!-- 配置文件判断网络是否连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Cont

Android判断网络是否连接,跳转到设置页面以及判断连接的是什么网络

如果拟开发一个网络应用的程序,首先考虑是否接入网络,在Android手机中判断是否联网可以通过ConnectivityManager 类的isAvailable()方法判断,首先获取网络通讯类的实例 ConnectivityManager cwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  ,使用cwjManager.getActiveNetworkInfo().isAvailable(

iOS 判断网络是否连接

1 //判断网络是否连接 2 + (BOOL) connectedToNetwork 3 { 4 //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态 5 struct sockaddr_in zeroAddress; //struct用来向方法中传递复杂的参数(把参数当作对象,这样便于扩展) 6 bzero(&zeroAddress, sizeof(zeroAddress)); 7 zeroAddress.sin_len = sizeof(zeroAddress); 8 zeroAd

c# 判断网络是连接到互联网

方法1:InternetGetConnectedState [System.Runtime.InteropServices.DllImport("wininet")] private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue); private void button1_Click(object sender, EventArgs e) {

android 判断网络是否连接

package com.liucanwen.baidulocation.util; import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.widget.Toast; public class NetworkStatus { public boolean ne

判断网络是否连接

ConnectivityManager connectivityManager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo mobNetInfo = connectivity

使用SCNetworkReachability判断网络是否连接

先来看一下整个方法 - (BOOL)isConnectionAvailable { //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态 struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability f

Reachability(判断网络是否连接)

/** 在应用委托的方法didFinishLaunchingWithOptions中添加*/ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];reachability = [[Reachability reachabilityWithHostName:@"