【第22期】观点:IT 行业加班,到底有没有价值?

安卓中的网络状态的获取

原创 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;
        }
    }
}


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

相关文章推荐

安卓获取网络状态工具类

安卓获取网络状态

基于AsyncTask和HttpClient的安卓异步网络工具

学安卓的时候发现AsyncTask挺好用的,所以就做了个基于基于HttpClient(post方法)和Asynctask的小工具,方便之后访问网络的操作 首先AsyNet抽象类,他继承了AsyncTask其中默认前两个泛型为String,第三个泛型与doInBackground的返回值有关所以就设置为T package com.dikaros.asynchronous; import java.util.HashMap; import org.ap

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

开源中国安卓客户端源码学习(二) 判断网络连接状态Android系统自动会为每个程序运行时创建一个Application类对象 , 且只创建一个, 所以Application可以说是单例模式的一个类...

安卓课程二十四 ImageView从网络上获取图片

本节采用两种方法创建Bitmap对象。主要过程是在xml中创建两个组件ImageView和Button。点击按钮下载图片,并做显示。创建了工具类HttpUtils,下载使用。 activity_main.xml &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xm

Android安卓获取网络状态

首先在AndroidManifest.xml添加权限 1,判断是否有网络连接 [java] view plain copy print?public boolean isNetworkConnecte...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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