zoukankan      html  css  js  c++  java
  • HttpUtil 【判断网络连接的封装类】

    版权声明:本文为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
         * <br/>0 - 测试版
         * <br/>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<String> accessibleProviders = lm.getProviders(true);   
            return accessibleProviders != null && accessibleProviders.size() > 0;   
        }
        
    }
    NetWorkHelper

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

    <resources>
        <string name="app_name">HttpUtilDemo</string>
    
        <!-- ******************公共字段:用于HttpUtil****************** -->
        <string name="network_enable">当前网络未连接</string>
        <string name="network_terrible">当前网络不佳,请检查您的网络设置。</string>
        <string name="network_error">网络连接异常</string>
        <string name="network_timeout">网络请求超时,请重试</string>
        <string name="network_unavailable">网络连接不可用</string>
        <!-- 公共字段 end-->
    
    </resources>

    在AndroidManifest.xml中添加以下代码

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.why.project.httputildemo">
    
        <!-- ======================授权访问网络(HttpUtil)========================== -->
        <!-- 允许程序打开网络套接字 -->
        <uses-permission android:name="android.permission.INTERNET"/>
        <!-- 允许程序访问有关GSM网络信息 -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!-- 允许程序访问Wi-Fi网络状态信息 -->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!-- 允许一个程序访问精良位置(如GPS)  -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <!-- 访问电话状态 -->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
    
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    三、使用方法

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

    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提示,这里使用的是ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】

    混淆配置

    参考资料

    暂时空缺

    项目demo下载地址

    https://github.com/haiyuKing/HttpUtilDemo

  • 相关阅读:
    记一次CTF比赛过程与解题思路MISC部分
    使用requests爬虫遇到的一个奇葩的问题:UnicodeEncodeError: 'latin1' codec can't encode character
    纯前端实现词云展示+附微博热搜词云Demo代码
    亚马逊精细化选品服务
    乔布斯访谈笔记
    使用腾讯云轻量级服务器
    centos 设置阿里的yum源
    云未来、新可能 绿色、无处不在、可信的计算
    OpenKruise v1.0:云原生应用自动化达到新的高峰
    服务发现与配置管理高可用最佳实践
  • 原文地址:https://www.cnblogs.com/whycxb/p/6857322.html
Copyright © 2011-2022 走看看