`

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();
        }

}

 

分享到:
评论

相关推荐

    android网络开发与应用实战详解源码

    《Android网络开发与应用实战详解》一书深入浅出地介绍了Android系统中如何实现网络通信,并提供了丰富的源码示例。这本书涵盖的内容广泛,包括基础的HTTP请求、数据解析、网络状态管理以及高级的WebSocket通信和...

    Android 网络摄像头实现

    以下是关于Android网络摄像头实现及其相关技术的详细解释: 1. **Socket通信**: Socket是TCP/IP协议族的一部分,提供了进程间通信的能力,允许不同设备间的应用程序之间进行双向数据传输。在Android网络摄像头...

    android 程序源码 网络得到地震信息

    1. **Android网络编程**: - Android应用程序可以通过HTTP或HTTPS协议与服务器进行通信,常用的方法有使用`HttpURLConnection`、`HttpClient`(已废弃)或第三方库如`OkHttp`。 - 为了获取地震信息,开发者通常会...

    android 网络速率实时显示

    在Android中,可以通过多种方式来获取网络流量信息。一种常见的方式是通过`ConnectivityManager`的`getActiveNetworkInfo()`方法获取当前活动的网络连接,然后通过`NetworkInfo`对象的`getDataUsageStatistics()`...

    Android网络请求框架

    本教程将深入探讨Android网络请求框架,帮助开发者理解和掌握这一核心技术。 一、Android网络请求的重要性 在移动设备上,应用程序通常需要访问互联网来获取实时数据,例如加载新闻、更新社交媒体状态或下载资源。...

    android网络操作

    本文将深入探讨“Android网络操作”的核心概念、常用方法以及如何利用封装好的框架进行高效开发。 一、Android网络访问基础 在Android中,网络操作主要依赖于java.net和HttpURLConnection类库,但出于性能和易用性...

    Android 网络监视器源码

    本篇将详细解析"Android网络监视器源码"的相关知识点。 1. **网络监控基础**: - **HTTP与HTTPS**:Android应用通常通过HTTP或HTTPS协议与服务器进行通信,网络监视器能捕捉到这些请求,展示请求头、请求体、响应...

    android网络测速app源代码

    【Android网络测速App源代码】是一个专门为Android平台设计的应用程序,用于测试设备的网络速度,包括上传和下载的速度。这个App不仅提供了基本的测速功能,还具有记录查询和结果保存到TXT文件的能力,同时结合了...

    Android 网络权限配置

    在Android开发中,网络权限配置是至关重要的,它关乎到应用程序能否正常地访问网络资源,进行数据的发送和接收。本文将深入探讨Android系统中的网络权限配置,以及如何在实际项目中正确设置和使用。 首先,Android...

    android实时网络质量检测

    4. **Traceroute**:虽然在Android中不常用,但`traceroute`可以追踪数据包在网络中的路由,提供更详细的网络路径信息。 实时网络质量检测对于游戏、视频通话、流媒体等对网络依赖性强的应用尤其重要。通过综合运用...

    Android 获取移动网络及SIM卡运营商信息.rar

    Android 获取移动网络及SIM卡运营商信息,可获取到SIM卡国别、SIM卡序列号、SIM卡状态、运营商代号、手机制式等信息。获取各个数据项的值:  listValues.add(tm.getDeviceId());//获取设备编号  listValues.add(tm...

    Android 判断网络连接

    然后,你可以通过`getActiveNetworkInfo()`方法获取当前活动的网络信息,或者在Android 6.0(API级别23)及以上版本使用`getNetworkCapabilities()`获取网络能力。接下来,检查这些信息是否为空以及网络是否连接: `...

    Android网络版五子棋

    如题是一个Android网络版的五子棋,服务器是用TCP编写,玩家间对战是通过发送UDP数据包发送对战信息,具体信息也可以看看我的博客:https://blog.csdn.net/ou_654/article/details/80978314

    android网络编程.pdf

    ### Android网络编程基础知识点 #### 一、网络状态检测 在Android开发中,为了确保应用程序能够根据当前网络环境做出响应,通常需要先检测设备的网络连接状态。这可以通过`ConnectivityManager`类来实现。 1. **...

    android 网络控制DEMO

    总的来说,这个DEMO是一个实用的教学工具,涵盖了Android网络控制的多个方面,对于提升开发者在Android网络编程方面的技能非常有帮助。通过学习和分析这个DEMO,开发者不仅可以了解Android网络控制的基本原理,还能...

    android 检测网络状态

    接下来,我们通过调用`getAllNetworkInfo()`方法获取设备上所有可用的网络信息列表: ```java else { NetworkInfo[] info = connectivity.getAllNetworkInfo(); ``` 该方法返回一个`NetworkInfo`数组,每个元素...

    android判断网络连接

    1. **Android网络权限**: 在AndroidManifest.xml文件中,首先需要添加`INTERNET`权限,以便应用可以访问网络: ```xml &lt;uses-permission android:name="android.permission.INTERNET" /&gt; ``` 2. **...

    Android 获取当前网速质量调整网络请求

    通过`ConnectivityManager`,我们可以获取到设备当前的网络连接信息,包括网络类型(如Wi-Fi、移动数据等)以及是否连接。一旦确定了网络连接,我们可以通过计算一定时间内数据传输的字节数来估算网速。 以下是一个...

Global site tag (gtag.js) - Google Analytics