zoukankan      html  css  js  c++  java
  • Android检测网络是否可用和主机是否可达

    检测网络是否可用主要用到NetworkInfo这个类,检测主机是否可达主要用到InetAddress类

    通过NetworkInfo可以获取网络各种状态,包括但不限于网络是否可用,是否已经连接上或者正在连接,是否漫游,当前状态等;

    InetAddress可以检测某个主机在制定时间内是否可达,用于检测当前环境与目标主机之间的通讯是否可用。

    封装好一下结构,方便使用。

            public static boolean isNetworkReachable(final Context _context, final boolean _useRoaming) {
                boolean isNetworkReachable = false;
                final ConnectivityManager systemService = (ConnectivityManager) _context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);

                /**
                 * Avoid NullPointerException when offline
                 
    */
                if (systemService.getActiveNetworkInfo() == null) {
                    Log.i(LOG_TAG, "Network not reachable!");
                    return false;
                }
                StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
                StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
                final NetworkInfo[] infos = systemService.getAllNetworkInfo();

                boolean userWantIOWhileRoaming = _useRoaming;

                for (final NetworkInfo info : infos) {
                    if (info != null) {
                        if (info.isConnectedOrConnecting()) {
                            final State networkState = info.getState();
                            final boolean isRoamingNow = info.isRoaming();
                            if (State.CONNECTED == networkState
                                    || State.CONNECTING == networkState) {
                                // if (Logging.isEnabled)
                                {
                                    Log.i(LOG_TAG, "Using: ");
                                    Log.i(LOG_TAG, "NetworkInfo.extraInfo : " + info.getExtraInfo());
                                    Log.i(LOG_TAG, "NetworkInfo.reason : " + info.getReason());
                                    Log.i(LOG_TAG, "NetworkInfo.subtypeName : " + info.getSubtypeName());
                                    Log.i(LOG_TAG, "NetworkInfo.state : " + info.getState());
                                    Log.i(LOG_TAG, "NetworkInfo.detailedState : " + info.getDetailedState());
                                    Log.i(LOG_TAG, "NetworkInfo.isAvailable : " + info.isAvailable());
                                    Log.i(LOG_TAG, "NetworkInfo.isConnected : " + info.isConnected());
                                    Log.i(LOG_TAG, "NetworkInfo.isConnectedOrConnecting : " + info.isConnectedOrConnecting());
                                    Log.i(LOG_TAG, "NetworkInfo.isFailover : " + info.isFailover());
                                    Log.i(LOG_TAG, "NetworkInfo.isRoaming : " + info.isRoaming());
                                    
                                    try {
                                        Log.i(LOG_TAG, "Host.isReachable : " + InetAddress.getByName( "192.168.1.27").isReachable(1000));
                                    } catch (UnknownHostException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }
                                if (userWantIOWhileRoaming) {
                                    isNetworkReachable = true;
                                    break;
                                } else {
                                    isNetworkReachable = isRoamingNow ? false
                                            : true;
                                    break;
                                }
                            }
                        }
                    }
                }
                return isNetworkReachable;

            } 

  • 相关阅读:
    linux入门系列8--shell编程入门
    linux入门系列7--管道符、重定向、环境变量
    linux入门系列6--软件管理之rpm和yum仓库
    linux入门系列5--新手必会的linux命令
    linux入门系列4--vi/vim编辑器
    linux入门系列3--常见的linux远程登陆管理工具
    linux入门系列2--CentOs图形界面操作及目录结构
    Linux入门系列1--环境准备及Linux安装
    曾经我也有一个做游戏的梦想,这几本游戏开发的书籍推荐给为未来的游戏工程师
    互联网公司的敏捷开发是怎么回事?这一份软件工程书单送给你!
  • 原文地址:https://www.cnblogs.com/hopetribe/p/2580637.html
Copyright © 2011-2022 走看看