Android 网络信息

public class NetworkUtil {
        
        private static final String TAG = "NetworkUtil";

        /**
         * 判断网络是否可用 <br>
         * 
         * @param context
         * @return
         */
        public static boolean haveInternet(Context context) {
                NetworkInfo info = (NetworkInfo) ((ConnectivityManager) context
                                .getSystemService(Context.CONNECTIVITY_SERVICE))
                                .getActiveNetworkInfo();

                if (info == null || !info.isConnected()) {
                        return false;
                }
                if (info.isRoaming()) {
                        // here is the roaming option you can change it if you want to
                        // disable internet while roaming, just return false
                        // 是否在漫游,可根据程序需求更改返回值
                        return false;
                }
                return true;
        }
        
        /**
         * 判断网络是否可用
         * @param context
         * @return
         */
        public static boolean isnetWorkAvilable(Context context) {
                ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
                if(connectivityManager == null) {
                        Log.e(TAG, "couldn't get connectivity manager");
                } else {
                        NetworkInfo [] networkInfos = connectivityManager.getAllNetworkInfo();
                        if(networkInfos != null){
                                for (int i = 0, count = networkInfos.length; i < count; i++) {
                                        if(networkInfos[i].getState() == NetworkInfo.State.CONNECTED){
                                                return true;
                                        }
                                }
                        }
                }
                return false;
        }

        /**
         * IP地址<br>
         * 
         * @return 如果返回null,证明没有网络链接。 如果返回String,就是设备当前使用的IP地址,不管是WiFi还是3G
         */
        public static String getLocalIpAddress() {
                try {
                        for (Enumeration<NetworkInterface> en = NetworkInterface
                                        .getNetworkInterfaces(); en.hasMoreElements();) {
                                NetworkInterface intf = en.nextElement();
                                for (Enumeration<InetAddress> enumIpAddr = intf
                                                .getInetAddresses(); enumIpAddr.hasMoreElements();) {
                                        InetAddress inetAddress = enumIpAddr.nextElement();
                                        if (!inetAddress.isLoopbackAddress()) {
                                                return inetAddress.getHostAddress().toString();
                                        }
                                }
                        }
                } catch (SocketException ex) {
                        Log.e("getLocalIpAddress", ex.toString());
                }
                return null;
        }

        /**
         * 获取MAC地址 <br>
         * 
         * @param context
         * @return
         */
        public static String getLocalMacAddress(Context context) {
                WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo info = wifi.getConnectionInfo();
                return info.getMacAddress();
        }
        
        /**
         * WIFI 是否可用
         * @param context
         * @return
         */
        public static boolean isWiFiActive(Context context) {
                ConnectivityManager connectivity = (ConnectivityManager) context  
                .getSystemService(Context.CONNECTIVITY_SERVICE);  
        if (connectivity != null) {  
            NetworkInfo[] info = connectivity.getAllNetworkInfo();  
            if (info != null) {  
                for (int i = 0; i < info.length; i++) {  
                    if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) {  
                        return true;  
                    }  
                }  
            }  
        }  
        return false;
        }
        
        /**
         * 存在多个连接点
         * @param context
         * @return
         */
        public static boolean hasMoreThanOneConnection(Context context){
                ConnectivityManager manager = (ConnectivityManager)context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                if(manager==null){
                        return false;
                }else{
                        NetworkInfo [] info = manager.getAllNetworkInfo();
                        int counter = 0;
                        for(int i = 0 ;i<info.length;i++){
                                if(info[i].isConnected()){
                                        counter++;
                                }
                        }
                        if(counter>1){
                                return true;
                        }
                }
                
                return false;
        }
        
    /*
     * HACKISH: These constants aren't yet available in my API level (7), but I need to handle these cases if they come up, on newer versions
     */
    public static final int NETWORK_TYPE_EHRPD=14; // Level 11
    public static final int NETWORK_TYPE_EVDO_B=12; // Level 9
    public static final int NETWORK_TYPE_HSPAP=15; // Level 13
    public static final int NETWORK_TYPE_IDEN=11; // Level 8
    public static final int NETWORK_TYPE_LTE=13; // Level 11

    /**
     * Check if there is any connectivity
     * @param context
     * @return
     */
    public static boolean isConnected(Context context){
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();
        return (info != null && info.isConnected());
    }
    /**
     * Check if there is fast connectivity
     * @param context
     * @return
     */
    public static boolean isConnectedFast(Context context){
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();
        return (info != null && info.isConnected() && isConnectionFast(info.getType(),info.getSubtype()));
    }

    /**
     * Check if the connection is fast
     * @param type
     * @param subType
     * @return
     */
    public static boolean isConnectionFast(int type, int subType){
        if(type==ConnectivityManager.TYPE_WIFI){
            System.out.println("CONNECTED VIA WIFI");
            return true;
        }else if(type==ConnectivityManager.TYPE_MOBILE){
            switch(subType){
            case TelephonyManager.NETWORK_TYPE_1xRTT:
                return false; // ~ 50-100 kbps
            case TelephonyManager.NETWORK_TYPE_CDMA:
                return false; // ~ 14-64 kbps
            case TelephonyManager.NETWORK_TYPE_EDGE:
                return false; // ~ 50-100 kbps
            case TelephonyManager.NETWORK_TYPE_EVDO_0:
                return true; // ~ 400-1000 kbps
            case TelephonyManager.NETWORK_TYPE_EVDO_A:
                return true; // ~ 600-1400 kbps
            case TelephonyManager.NETWORK_TYPE_GPRS:
                return false; // ~ 100 kbps
            case TelephonyManager.NETWORK_TYPE_HSDPA:
                return true; // ~ 2-14 Mbps
            case TelephonyManager.NETWORK_TYPE_HSPA:
                return true; // ~ 700-1700 kbps
            case TelephonyManager.NETWORK_TYPE_HSUPA:
                return true; // ~ 1-23 Mbps
            case TelephonyManager.NETWORK_TYPE_UMTS:
                return true; // ~ 400-7000 kbps
            // NOT AVAILABLE YET IN API LEVEL 7
            case NETWORK_TYPE_EHRPD:
                return true; // ~ 1-2 Mbps
            case NETWORK_TYPE_EVDO_B:
                return true; // ~ 5 Mbps
            case NETWORK_TYPE_HSPAP:
                return true; // ~ 10-20 Mbps
            case NETWORK_TYPE_IDEN:
                return false; // ~25 kbps 
            case NETWORK_TYPE_LTE:
                return true; // ~ 10+ Mbps
            // Unknown
            case TelephonyManager.NETWORK_TYPE_UNKNOWN:
                return false; 
            default:
                return false;
            }
        }else{
            return false;
        }
    }
        
        /**
         * IP转整型
         * @param ip
         * @return
         */
        public static long ip2int(String ip) {
            String[] items = ip.split("\\.");
            return Long.valueOf(items[0]) << 24
                    | Long.valueOf(items[1]) << 16
                    | Long.valueOf(items[2]) << 8 | Long.valueOf(items[3]);
        }
        
        /**
         * 整型转IP
         * @param ipInt
         * @return
         */
        public static String int2ip(long ipInt) {
        StringBuilder sb = new StringBuilder();
        sb.append(ipInt & 0xFF).append(".");
        sb.append((ipInt >> 8) & 0xFF).append(".");
        sb.append((ipInt >> 16) & 0xFF).append(".");
        sb.append((ipInt >> 24) & 0xFF);
        return sb.toString();
        }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值