博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpUtil 【判断网络连接的封装类】
阅读量:7080 次
发布时间:2019-06-28

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

版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

该封装类主要包括以下功能:

判断是否有网络连接、判断是否有可用的网络连接;

判断是否是3G网络、判断mobile网络是否可用;

判断是否是wifi、判断wifi网络是否可用;

判断网络是否为漫游;

判断GPS是否打开。

目前常用的场景是,在调用接口之前先判断是否有网络连接,如果有网络连接,则执行网络请求接口,否则提示“当前网络未连接”。其他方法暂时不经常用。

效果图

暂不需要

代码分析

Configs:存放是否测试的常量值。(也可以存放其他常量值)

HttpUtil:封装常用的方法的封装类。

NetWorkHelper:进行网络判断的具体实现类。

使用步骤

一、项目组织结构图

注意事项:

1、导入类文件后需要change包名以及重新import R文件路径

2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将Configs、HttpUtil、NetWorkHelper类复制到项目中

package com.why.project.httputildemo.util.httputil;/** * Used 用于HttpUtil */public class Configs {    /**     * 是否测试版,用于HttpUtil     * 
0 - 测试版 *
1 - 正式版*/ public static int TEST_FLAG = 1;// public static int TEST_FLAG = 0; }
Configs
package com.why.project.httputildemo.util.httputil;import android.content.Context;import android.util.Log;import java.io.UnsupportedEncodingException;/** * Used 判断网络连接的封装类 */public class HttpUtil {        /**     * 仅仅用来判断是否有网络连接     */    public static boolean isNetworkAvailable(Context context) {        if (Configs.TEST_FLAG == 0)        {            return true;        } else {            return NetWorkHelper.isNetworkAvailable(context);        }    }        /**     * 判断是否有可用的网络连接     * */    public static boolean isNetworkConnected(Context context) {        if (Configs.TEST_FLAG == 0)        {            return true;        } else {            return NetWorkHelper.isNetworkConnected(context);        }    }        /**     * 判断mobile网络是否可用     */    public static boolean isMobileDataEnable(Context context) {        String TAG = "httpUtils.isMobileDataEnable()";        try {            return NetWorkHelper.isMobileDataEnable(context);        } catch (Exception e) {            Log.e(TAG, e.getMessage());            e.printStackTrace();            return false;        }    }    /**     * 判断wifi网络是否可用     */    public static boolean isWifiDataEnable(Context context) {        String TAG = "httpUtils.isWifiDataEnable()";        try {            return NetWorkHelper.isWifiDataEnable(context);        } catch (Exception e) {            Log.e(TAG, e.getMessage());            e.printStackTrace();            return false;        }    }    /**     * 判断是否为漫游     */    public static boolean isNetworkRoaming(Context context) {        return NetWorkHelper.isNetworkRoaming(context);    }        /**     * 编码测试     */    public static void testCharset(String datastr) {        try {            String temp = new String(datastr.getBytes(), "GBK");            Log.v("TestCharset", "****** getBytes() -> GBK ******/n" + temp);            temp = new String(datastr.getBytes("GBK"), "UTF-8");            Log.v("TestCharset", "****** GBK -> UTF-8 *******/n" + temp);            temp = new String(datastr.getBytes("GBK"), "ISO-8859-1");            Log.v("TestCharset", "****** GBK -> ISO-8859-1 *******/n" + temp);            temp = new String(datastr.getBytes("ISO-8859-1"), "UTF-8");            Log.v("TestCharset", "****** ISO-8859-1 -> UTF-8 *******/n" + temp);            temp = new String(datastr.getBytes("ISO-8859-1"), "GBK");            Log.v("TestCharset", "****** ISO-8859-1 -> GBK *******/n" + temp);            temp = new String(datastr.getBytes("UTF-8"), "GBK");            Log.v("TestCharset", "****** UTF-8 -> GBK *******/n" + temp);            temp = new String(datastr.getBytes("UTF-8"), "ISO-8859-1");            Log.v("TestCharset", "****** UTF-8 -> ISO-8859-1 *******/n" + temp);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }    }}
HttpUtil
package com.why.project.httputildemo.util.httputil;import android.content.Context;import android.location.LocationManager;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.telephony.TelephonyManager;import java.util.List;/** * Used 网络连接的判断:是否有网络、网络是否可用、判断是wifi还是3G、判断wifi是否可用、判断3G是否可用 * 权限 android.permission.ACCESS_NETWORK_STATE */public class NetWorkHelper {    /**     * 仅仅用来判断是否有网络连接     */    public static boolean isNetworkAvailable(Context context) {        // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)        ConnectivityManager manager = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        if(manager != null){            // 获取当前活动的NetworkInfo对象            NetworkInfo networkInfo = manager.getActiveNetworkInfo();            if (networkInfo != null) {                /*Log.d(TAG, "info.isAvailable=="+info.isAvailable());*/                return networkInfo.isAvailable();            }        }        return false;    }        /**     * 判断是否有可用的网络连接     * */    /*     * 只打开3G连接的时候:     * 0===类型===MOBILE     * 0===状态===CONNECTED     * 打开wifi连接和3G连接的时候:     * 0===类型===MOBILE     * 0===状态===DISCONNECTED     * 1===类型===WIFI     * 1===状态===CONNECTED     * */    public static boolean isNetworkConnected(Context context) {                boolean netstate = false;                ConnectivityManager manager = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);                if (manager != null)        {            NetworkInfo[] networkInfo = manager.getAllNetworkInfo();            if (networkInfo != null) {                for (int i = 0; i < networkInfo.length; i++)                {                    /*Log.d(TAG,i + "===类型===" + info[i].getTypeName());                    Log.d(TAG,i + "===状态===" + info[i].getState());*/                    if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)                    {                        netstate = true;                        break;                    }                }            }        }        return netstate;    }        /**     * 判断是否是wifi,用户的体现性在这里了,wifi就可以建议下载或者在线播放     * */    public static boolean isWifi(Context context) {           ConnectivityManager manager = (ConnectivityManager) context                   .getSystemService(Context.CONNECTIVITY_SERVICE);           NetworkInfo networkInfo = manager.getActiveNetworkInfo();           if (networkInfo != null                   && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {               return true;           }           return false;       }        /**     * 判断wifi 是否可用     * @param context     * @return     * @throws Exception     */    public static boolean isWifiDataEnable(Context context) throws Exception {        ConnectivityManager manager = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);                boolean isWifiDataEnable = false;                isWifiDataEnable = manager.getNetworkInfo(                ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();        return isWifiDataEnable;    }        /**     * 判断是否是3G网络     * */    public static boolean is3rd(Context context) {           ConnectivityManager manager = (ConnectivityManager) context                   .getSystemService(Context.CONNECTIVITY_SERVICE);           NetworkInfo networkInfo = manager.getActiveNetworkInfo();           if (networkInfo != null                   && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {               return true;           }           return false;       }        /**     * 判断3G网络是否可用     *      * @param context     * @return     * @throws Exception     */    public static boolean isMobileDataEnable(Context context) throws Exception {        ConnectivityManager manager = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        boolean isMobileDataEnable = false;        isMobileDataEnable = manager.getNetworkInfo(                ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();        return isMobileDataEnable;    }        /**     * 判断网络是否为漫游     */    public static boolean isNetworkRoaming(Context context) {        ConnectivityManager manager = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        if (manager != null) {            NetworkInfo info = manager.getActiveNetworkInfo();            if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {                TelephonyManager tm = (TelephonyManager) context                        .getSystemService(Context.TELEPHONY_SERVICE);                if (tm != null && tm.isNetworkRoaming()) {                    return true;                } else {                }            }        }        return false;    }    /**     * 判断GPS是否打开     * */    public static boolean isGpsEnabled(Context context) {           LocationManager lm = ((LocationManager) context                   .getSystemService(Context.LOCATION_SERVICE));        List
accessibleProviders = lm.getProviders(true); return accessibleProviders != null && accessibleProviders.size() > 0; } }
NetWorkHelper

在strings.xml文件中添加以下代码

HttpUtilDemo
当前网络未连接
当前网络不佳,请检查您的网络设置。
网络连接异常
网络请求超时,请重试
网络连接不可用

在AndroidManifest.xml中添加以下代码

三、使用方法

以登录网络请求接口为例,大概的写法如下(此处只是框架,不含有登录接口的具体实现方法)

package com.why.project.httputildemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.why.project.httputildemo.util.httputil.HttpUtil;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Login();    }    /**     * 程序登录     */    private void Login(){        if (HttpUtil.isNetworkAvailable(this)) {            //执行网络请求接口        }else{
ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.network_enable)); } }}

注意:Toast提示,这里使用的是

混淆配置

参考资料

暂时空缺

项目demo下载地址

你可能感兴趣的文章
前端WEB-API 第四天-- 操作DOM 与 动态创建 DOM
查看>>
notify,notifyAll区别(生产者消费者案例)
查看>>
Spring IoC、AOP、Transaction、MVC 归纳小结
查看>>
Linux常用命令 —locate、which、whereis、grep
查看>>
编译FFMpeg
查看>>
css-margin
查看>>
深入理解Javascript中的隐式调用
查看>>
kotlin学习笔记——lambda表达式
查看>>
ES6-Promise 源码阅读
查看>>
Java系列3---注解
查看>>
正则表达式
查看>>
小猿圈python学习-字符编码的转换
查看>>
【Android自定义View】绘图之Canvas篇(五)
查看>>
如何提高你技术提问的关注度、回答率?
查看>>
VUE自定义指令
查看>>
DOM 属性总结
查看>>
区块链技术对未来的影响
查看>>
JS设计模式初识(三)-代理模式
查看>>
一次全栈实践心得
查看>>
如今,收入最高编程语言资料汇总!看到就是赚到哦!
查看>>