zoukankan      html  css  js  c++  java
  • 使用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>

  • 相关阅读:
    NLPIR的语义分析系统
    [译] 12步轻松搞定python装饰器
    python实现爬取千万淘宝商品的方法_python_脚本之家
    Deep Learning(深度学习)学习笔记整理系列 | @Get社区
    那些年,曾经被我们误读的大数据
    值得关注的10个python语言博客
    淘宝的评论归纳是如何做到的?
    pycharm激活码
    Windows下配置Qt 5.8+opencv 3.1.0开发环境
    Ubuntu安装opencv3.1.0后配置环境变量
  • 原文地址:https://www.cnblogs.com/ywtk/p/3876076.html
Copyright © 2011-2022 走看看