博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络类型判断
阅读量:4670 次
发布时间:2019-06-09

本文共 9180 字,大约阅读时间需要 30 分钟。

判断当前所用网络的状态,包括主动判断和当网络变化时的被动判断

一、MainActivity.java

package com.example.networklistener;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.view.Menu;import android.view.MenuItem;import android.view.TextureView;import android.view.View;import android.widget.LinearLayout;import android.widget.ScrollView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {    private TextView tv_network;    private NetStateChangedReceiver receiver;    private LinearLayout ll_network;    private ScrollView sv_network;    private Timer timer;    private String frontName = "无";    private Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            showNetWork(false);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        setupView();        addListener();        initReceiver();        setData();    }    private void initReceiver() {        receiver = new NetStateChangedReceiver();        IntentFilter filter = new IntentFilter();        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");        registerReceiver(receiver, filter);    }    private void setupView() {        tv_network = (TextView) findViewById(R.id.tv_network);        ll_network = (LinearLayout) findViewById(R.id.ll_network);        sv_network = (ScrollView) findViewById(R.id.sv_network);    }    private void addListener() {    }    private void setData() {        timer = new Timer();        timer.schedule(new TimerTask() {            @Override            public void run() {                handler.sendEmptyMessage(0);            }        }, 1000, 20 * 1000);    }    public class NetStateChangedReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            showNetWork(true);        }    }    private void showNetWork(boolean BDflag) {        View view = View.inflate(this, R.layout.item_network, null);        TextView tv_type = (TextView) view.findViewById(R.id.tv_type);        TextView tv_state = (TextView) view.findViewById(R.id.tv_state);        TextView tv_clz = (TextView) view.findViewById(R.id.tv_clz);        TextView tv_time = (TextView) view.findViewById(R.id.tv_time);        if (BDflag) {            tv_clz.setText("被动");        } else {            tv_clz.setText("主动");            tv_clz.setTextColor(0xff2D8841);        }        String time = new SimpleDateFormat("yyyy_MM_dd HH:mm:ss")                .format(new Date());        tv_time.setText(time);        tv_state.setText("已连接");        int netType = NetTypeUtil.getNetWorkType(this);        switch (netType) {        case NetTypeUtil.NETWORKTYPE_INVALID:            if (BDflag) {                tv_type.setText(frontName);                tv_state.setText("断开");            } else {                tv_type.setText("无");                tv_state.setText("*");            }            break;        case NetTypeUtil.NETWORKTYPE_WAP:            tv_type.setText("WAP");            break;        case NetTypeUtil.NETWORKTYPE_2G:            tv_type.setText("2G");            break;        case NetTypeUtil.NETWORKTYPE_3G:            tv_type.setText("3G");            break;        case NetTypeUtil.NETWORKTYPE_WIFI:            tv_type.setText("WIFI");            break;        }        frontName = tv_type.getText().toString();        ll_network.addView(view);        new Handler().post(new Runnable() {            @Override            public void run() {                moveUI();            }        });    }    /**     * ui重构     */    private void moveUI() {        new Handler().post(new Runnable() {            @Override            public void run() {                int svHeight = sv_network.getHeight();                int llHeight = ll_network.getHeight();                if (llHeight > svHeight) {                    int moveY = llHeight - svHeight;                    sv_network.scrollTo(0, moveY);                }            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onMenuItemSelected(int featureId, MenuItem item) {        switch (item.getItemId()) {        case R.id.item_start:            if (timer != null) {                timer.cancel();            }            setData();            break;        case R.id.item_stop:            timer.cancel();            timer = null;            break;        case R.id.item_clear:            ll_network.removeAllViews();            break;        default:            break;        }        return super.onMenuItemSelected(featureId, item);    }    @Override    protected void onDestroy() {        unregisterReceiver(receiver);        super.onDestroy();    }}

二、NetTypeUtil.java

package com.example.networklistener;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.telephony.TelephonyManager;import android.text.TextUtils;public class NetTypeUtil {    /** 没有网络 */    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 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;        }    }    /**     * 获取网络状态,wifi,wap,2g,3g.     *      * @param context     *            上下文     * @return int 网络状态 {
@link #NETWORKTYPE_2G},{
@link #NETWORKTYPE_3G}, * * {
@link #NETWORKTYPE_INVALID},{
@link #NETWORKTYPE_WAP}* *

* {

@link #NETWORKTYPE_WIFI} */ public static int getNetWorkType(Context context) { int mNetWorkType = -1; 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; }}

三、activity_main.xml

四、item_network.xml

 

转载于:https://www.cnblogs.com/Dbzzcz/p/4342976.html

你可能感兴趣的文章
8丶运行及总结
查看>>
Unity获取手机的电量时间
查看>>
Spring框架:Spring容器具体解释
查看>>
MongoDB 3.2 从安装到使用。
查看>>
面对最菜TI战队,OpenAI在Dota2上输的毫无还手之力
查看>>
XCODE快捷键和功能汇总篇(不断更新)
查看>>
Servlet开发(一)
查看>>
linux下如何查看某个容器的详细信息?
查看>>
bzoj 2843: 极地旅行社
查看>>
车林通购车之家--购车计算器模块--算法js
查看>>
webpack使用教程
查看>>
MySQL学习8 - 数据的增删改
查看>>
Linux笔记(开机自动将kerne log保存到SD卡中)
查看>>
Ajax提交数据判断员工编号是否存在,及自动填充与员工编号所对应的员工姓名。...
查看>>
CodeForces 689E (离散化+逆元+组合)
查看>>
pycharm 右键无法显示unittest框架&&解决右键只有unittest 运行如何取消右键显示进行普通run...
查看>>
jQuery的选择器
查看>>
Shell 概述、截取字符操作等
查看>>
CTF/web
查看>>
第五章上 首次登陆
查看>>