安卓中的网络状态的获取

原创 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添加权限 Android:name="android.permission.ACCESS_NETWORK_STATE" /> 1,判断是否有...

安卓开发-判断网络连接状态

  • 2015年12月12日 01:17
  • 23KB
  • 下载

安卓:handler解析json新闻,显示图片,标题,内容(未判断网络连接状态)

结果如图: 注意:加网络权限 逻辑代码文件: package com.example.day18_work; import java.util.List; import j...

安卓网络框架,上传图片花图,上传状态411被服务器驳回

先看下一开始使用的网络框架核心代码: private Message doPost(final String url, final Map params, final Map inputStream...
  • hytfly
  • hytfly
  • 2015年10月25日 15:48
  • 1283

安卓手机网络状态收集总结

原文:http://my.eoe.cn/myboby/archive/17849.html?f=nge 网络状态有三个类: ConnectivityManager,WifiManager,Tele...

关于安卓监听网络状态

1.判断是否打开网络 import android.app.Activity; import android.app.AlertDialog; import android.content.Cont...

安卓系统为24时,如何实现网络状态的监测

安卓系统为7时,系统去掉了网络监测的广播,测试系统任然可以接收广播,为了适配低版本,可结合版本的不同写不同的逻辑清单中配置权限...

安卓检测网络连接状态的工具类

写项目时经常需要判断网络的连接状态,每次都翻书查资料感觉有点费事,所以封装了一个工具类,里面包含了几个判断网络连接状态的方法,方便以后开发中的使用 package com.zhuandian.fan...

开源中国安卓客户端源码学习(二) 判断网络连接状态

开源中国安卓客户端源码学习(二) 判断网络连接状态Android系统自动会为每个程序运行时创建一个Application类对象 , 且只创建一个, 所以Application可以说是单例模式的一个类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓中的网络状态的获取
举报原因:
原因补充:

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