安卓中的网络状态的获取

原创 2016年08月30日 20:31:30

首先。。。加入权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


其次。。。编写工具类


package com.example.util;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

public class NetUtils {
    /** 没有网络 */
    public static final int NETWORKTYPE_INVALID = 0;
    /** wap网络 */
    public static final int NETWORKTYPE_WAP = 1;
    /** 2G网络 */
    public static final int NETWORKTYPE_2G = 2;
    /** 3G和3G以上网络,或统称为快速网络 */
    public static final int NETWORKTYPE_3G = 3;
    /** wifi网络 */
    public static final int NETWORKTYPE_WIFI = 4;
    private static int mNetWorkType;
    /**
     * 获取网络状态,wifi,wap,2g,3g.
     *
     * @param context
     *            上下文
     * @return int 网络状态 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G}, *
     *         {@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP}*
     *         <p>
     *         {@link #NETWORKTYPE_WIFI}
     */
    public static boolean isFastMobileNetwork(Context context) {
        TelephonyManager telephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        switch (telephonyManager.getNetworkType()) {
        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
        case TelephonyManager.NETWORK_TYPE_EHRPD:
            return true; // ~ 1-2 Mbps
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
            return true; // ~ 5 Mbps
        case TelephonyManager.NETWORK_TYPE_HSPAP:
            return true; // ~ 10-20 Mbps
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return false; // ~25 kbps
        case TelephonyManager.NETWORK_TYPE_LTE:
            return true; // ~ 10+ Mbps
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            return false;
        default:
            return false;
        }
    }

    public static int getNetWorkType(Context context) {
        String str = null;
        ConnectivityManager manager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();

        if (networkInfo != null && networkInfo.isConnected()) {
            String type = networkInfo.getTypeName();

            if (type.equalsIgnoreCase("WIFI")) {
                mNetWorkType = NETWORKTYPE_WIFI;
            } else if (type.equalsIgnoreCase("MOBILE")) {
                String proxyHost = android.net.Proxy.getDefaultHost();
                mNetWorkType = TextUtils.isEmpty(proxyHost) ? (isFastMobileNetwork(context) ? NETWORKTYPE_3G
                        : NETWORKTYPE_2G)
                        : NETWORKTYPE_WAP;
            }
        } else {
            mNetWorkType = NETWORKTYPE_INVALID;
        }
        return mNetWorkType;
    }
}
//最后根据返回的参数判断网络类型

package com.example;

import com.example.util.NetUtils;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new NetUtils();
        int i = NetUtils.getNetWorkType(this);
        switch (i) {
        case 0:
            Toast.makeText(this, "无网络" , 1).show();
            break;
        case 1:
            Toast.makeText(this, "wap" , 1).show();
            break;
        case 2:
            Toast.makeText(this, "2G" , 1).show();
            break;
        case 3:
            Toast.makeText(this, "3G或更高", 1).show();
            break;
        case 4:
            Toast.makeText(this, "当前网络为WIFI" , 1).show();
            break;

        default:
            break;
        }
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android安卓获取网络状态

首先在AndroidManifest.xml添加权限 1,判断是否有网络连接
  • SysProgram
  • SysProgram
  • 2014年12月09日 00:42
  • 18155

android 获取手机网络状态

与网络相关的,就经常要做网络状态判断及信息获取。 用到的类ConnectivityManager 和NetworkInfo                  //获取网络连接管理者     ...
  • java_zhaoyanli
  • java_zhaoyanli
  • 2015年05月25日 19:52
  • 1312

Android获取当前网络状态

Android获取当前网络状态效果图 有网络 没有网络 源码下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/905283...
  • q4878802
  • q4878802
  • 2015年08月27日 10:32
  • 1265

Android系统信息获取 之六:网络连接状态信息获取

Android系统可以通过WIFI和移动网络来连接互联网,系统网络连接状态是通过ConnectivityManager 类来获取的。关键代码如下: [java] view p...
  • u010164190
  • u010164190
  • 2016年10月14日 11:34
  • 2523

Android:检测网络状态&监听网络变化

前言 Android开发中,许多功能需要网络连接,所以在开发过程中需要进行手机网络的检测 今天,我将教大家如何进行网络状态的检测和监听网络状态的变化 目录1. 检测网络状态1.1 实现思路 获得Con...
  • carson_ho
  • carson_ho
  • 2016年11月02日 21:10
  • 11184

iOS开发 - 获取当前网络状态

runtime获取网络状态 首先导入头文件:#import 实现如下代码判断: // 状态栏是由当前控制器控制的,首先获取当前app。 UIApplication *app = [...
  • Hierarch_Lee
  • Hierarch_Lee
  • 2015年08月28日 17:55
  • 2926

Android网络状态判断工具类(全)

NetworkUtils工具类里封装了以下方法: [html] view plain copy print?openWirelessSettings   : 打开网络设置界面  isConnected...
  • qq_39085422
  • qq_39085422
  • 2017年11月08日 19:12
  • 1449

Android 判定网络连接状态 以及监听网络链接状态的变化

在实习的项目中经常会有需要判定网络链接状态和坚听网络状态变化的需求,由于经常会用到这个,我也将判定当前网络状态的代码封装成一个工具类,并结合这个工具类写了一个专门的网络状态监听器,结合接口来让app在...
  • sinat_30472685
  • sinat_30472685
  • 2017年12月26日 14:01
  • 122

安卓获取网络状态工具类

安卓获取网络状态
  • qq_29716061
  • qq_29716061
  • 2016年06月07日 10:19
  • 169

android 获取网络状态

方案一: 在代码中,主要使用了两个类:ConnectivityManager和NetworkInfo类。这里只判断了两种大类的网络类型:wIfi(wifi网络)和mobile(数据流量)。 priva...
  • u012720411
  • u012720411
  • 2015年08月25日 18:13
  • 184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓中的网络状态的获取
举报原因:
原因补充:

(最多只允许输入30个字)